Wilhel

Wilhel

vim编辑器

基本操作#

命令行模式#

  • :q 退出(关闭窗口)
  • :w 保存(写)
  • :wq 保存然后退出
  • :e {文件名} 打开要编辑的文件
  • :ls 显示打开的缓存
  • :help {标题} 打开帮助文档
    • :help :w 打开 :w 命令的帮助文档
    • :help w 打开 w 移动的帮助文档

移动 - 多数情况在正常模式#

  • 基本移动: hjkl (左,下,上,右)
  • 词: w (下一个词), b (词初), e (词尾)
  • 行: 0 (行初), ^ (第一个非空格字符), $ (行尾)
  • 屏幕: H (屏幕首行), M (屏幕中间), L (屏幕底部)
  • 翻页: Ctrl-u (上翻), Ctrl-d (下翻)
  • 文件: gg (文件头), G (文件尾)
  • 行数: :{行数}<CR> 或者 {行数}G ({行数} 为行数)
  • 杂项: % (找到配对,比如括号或者 /* */ 之类的注释对)
  • 查找: f{字符}, t{字符}, F{字符}, T{字符}
    • 查找 / 到向前 / 向后在本行的 {字符}
    • , / ; 用于导航匹配
  • 搜索: /{正则表达式}n / N 用于导航匹配

选择 - 可视化模式#

  • 可视化:v
  • 可视化行: V
  • 可视化块:Ctrl+v

编辑#

  • i 进入插入模式
    • 但是对于操纵 / 编辑文本,不单想用退格键完成
  • O / o 在之上 / 之下插入行
  • d{移动命令} 删除 {移动命令}
    • 例如,dw 删除词, d$ 删除到行尾, d0 删除到行头。
  • c{移动命令} 改变 {移动命令}
    • 例如,cw 改变词
    • 比如 d{移动命令} 再 i
  • x 删除字符(等同于 dl
  • s 替换字符(等同于 xi
  • 可视化模式 + 操作
    • 选中文字, d 删除或者 c 改变
  • u 撤销, <C-r> 重做
  • y 复制 / “yank” (其他一些命令比如 d 也会复制)
  • p 粘贴
  • 更多值得学习的:比如 ~ 改变字符的大小写

计数#

  • 3w 向前移动三个词
  • 5j 向下移动 5 行
  • 7dw 删除 7 个词

修饰语#

你可以用修饰语改变 “名词” 的意义。修饰语有 i,表示 “内部” 或者 “在内 “,和 a,表示” 周围 “。

  • ci( 改变当前括号内的内容
  • ci[ 改变当前方括号内的内容
  • da' 删除一个单引号字符串,包括周围的单引号

演示#

# fizzbuzz.py
import sys

def fizz_buzz(limit):
    for i in range(1,limit+1):
        if i % 3 == 0:
            print('fizz', end="")
        if i % 5 == 0:
            print('buzz', end="")
        if i % 3 and i % 5:
            print(i)
        else:
            print()

def main():
    fizz_buzz(int(sys.argv[1]))
    
if __name__ == '__main__':
    main()
  • . 重复上一次修改
  • sys.argv[1] 传入的第一个参数

自定义 Vim#

vim ~/.vimrc
vim /etc/vim/vimrc # debian

扩展 Vim#

常用推荐插件:

讲师们的开源配置文件:

 Vim Awesome

其他程序的 Vim 模式#

Shell#

Bash set -o vi

Zsh bindkey -v

Fish fish_vi_key_bindings

通用 export EDITOR=vim

Readline#

vim ~/.inputrc
vim /etc/inputrc # debian

set editing-mode vi # 开启vi编辑模式,python REPL 支持Vim快捷键

Vim 进阶#

搜索和替换#

:s (替换)命令(文档)。

  • %s/foo/bar/g
    • 在整个文件中将 foo 全局替换成 bar
  • %s/\[.*\](\(.*\))/\1/g
    • 将有命名的 Markdown 链接替换成简单 URLs

多窗口#

  • 用 :sp / :vsp 来分割窗口
  • 同一个缓存可以在多个窗口中显示。

#

  • q{字符} 来开始在寄存器{字符}中录制宏
  • q停止录制
  • @{字符} 重放宏
  • 宏的执行遇错误会停止
  • {计数}@{字符}执行一个宏 {计数} 次
  • 宏可以递归
    • 首先用q{字符}q清除宏
    • 录制该宏,用 @{字符} 来递归调用该宏 (在录制完成之前不会有任何操作)
  • 例子:将 xml 转成 json (file)
    • 一个有 “name” / “email” 键对象的数组
    • 用一个 Python 程序?
    • 用 sed / 正则表达式
      • g/people/d
      • %s/<person>/{/g
      • %s/<name>\(.*\)<\/name>/"name": "\1",/g
    • Vim 命令 / 宏
      • Gddggdd 删除第一行和最后一行
      • 格式化最后一个元素的宏 (寄存器 e
        • 跳转到有 <name> 的行
        • qe^r"f>s": "<ESC>f<C"<ESC>q
      • 格式化一个的宏
        • 跳转到有 <person> 的行
        • qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
      • 格式化一个标签然后转到另外一个的宏
        • 跳转到有 <person> 的行
        • qq@pjq
      • 执行宏到文件尾
        • 999@q
      • 手动移除最后的 , 然后加上 [ 和 ] 分隔符

扩展资料#

课后练习#

  1. 完成 vimtutor。备注:它在一个 80x24(80 列,24 行) 终端窗口看起来效果最好。
  2. 下载我们提供的 vimrc,然后把它保存到 ~/.vimrc。 通读这个注释详细的文件 (用 Vim!), 然后观察 Vim 在这个新的设置下看起来和使用起来有哪些细微的区别。
  3. 安装和配置一个插件: ctrlp.vim.
    1. 用 mkdir -p ~/.vim/pack/vendor/start 创建插件文件夹
    2. 下载这个插件: cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
      # 下载后需在 vimrc 中添加如下配置
      set runtimepath^=~/.vim/pack/vendor/start/ctrlp.vim 
      
    3.  阅读这个插件的 [文档](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md)。尝试用 CtrlP 来在一个工程文件夹里定位一个文件,打开 Vim, 然后用 Vim 命令控制行开始 `:CtrlP`.
    4.  自定义 CtrlP:添加 [configuration](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md#basic-options) 到你的 `~/.vimrc` 来用按 Ctrl-P 打开 CtrlP
    
  4. 练习使用 Vim, 在你自己的机器上重做 演示
  5. 下个月用 Vim 完成_所有的_文件编辑。每当不够高效的时候,或者你感觉 “一定有一个更好的方式” 时, 尝试求助搜索引擎,很有可能有一个更好的方式。如果你遇到难题,可以来我们的答疑时间或者给我们发邮件。
  6. 在其他工具中设置 Vim 快捷键 (见上面的操作指南)。
  7. 进一步自定义你的 ~/.vimrc 和安装更多插件。
    使用 vim-plug 安装插件:
    1. 安装 vim-plug
     $ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
    
    1. 修改~/.vimrc
     call plug#begin()
     Plug 'preservim/NERDTree' #需要安装的插件 NERDTree
     Plug 'wikitopian/hardmode'  #安装 hardmode
     ..... # 更多插件
     call plug#end()
    
    1. 在 vim 命令行中执行 :PlugInstall
  8. (高阶)用 Vim 宏将 XML 转换到 JSON (例子文件)。尝试着先完全自己做,但是在你卡住的时候可以查看上面 章节。
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。