查找与替换
多窗口与分屏
- 屏幕滚动 :
Ctrl + u(上翻半屏)、Ctrl + d(下翻半屏)、Ctrl + b(上翻整屏)、Ctrl + f(下翻整屏)。 - 删除 :
dd(删除整行)、dw(删除单词)、d$(删除到行尾)。 - 复制粘贴 :
yy(复制整行)、yw(复制单词)、p(粘贴到光标后)、P(粘贴到光标前)。 - 撤销与重做 :
u(撤销)、Ctrl + r(重做)。 - 查找 :
/pattern(向前查找)、?pattern(向后查找)、n(下一个匹配项)、N(上一个匹配项)。 - 替换 :
:s/old/new/g(当前行替换)、:%s/old/new/g(全局替换)。 - 分屏 :
:split(水平分屏)、:vsplit(垂直分屏)。 - 窗口切换 :
Ctrl + w + h/j/k/l(切换到左/下/上/右窗口)、Ctrl + w + w(循环切换窗口)。
宏录制
- 录制 :
q{寄存器名}(开始录制)、q(结束录制)。 - 执行 :
@{寄存器名}(执行录制的宏)、@@(重复上次执行的宏)
寄存器 :"{寄存器名}(指定寄存器操作),例如 "ayy 复制当前行到寄存器 a。
- f{char} 命令让vim 查找下一处指定支付{char}出现的位置,如果找到了,就直接把光标移到那里,它会在光标位置与当前位置行尾之间查找指定的字符;
- t{char}正向移动到下一个{char}所在之处的前一个字符上;
- ;命令会重复查找上次f命令所查找的字符,命令可以反向查找上次f{char}查找的字符 ;
- >G命令会增加从当前行到问文档末尾处的缩进层级
- Vim会把我们离开插入模式之前的全部按键操作都记录下来,然后按.进行重复操作;
- <ctrl-a>和<ctrl-x>命令分别对数字执行加和减操作
- 如果光标不在数字上,那么<ctrl-a>将在当前行正向查找一个数字,如果找到就会跳到哪里;
- 如果带一个次数前缀,那就可以用他们加减任意整数。比如,把光标移到字符5上,执行10<ctrl-a>就会把它变为15;
- cw:删除当前单词并进入插入模式;
- G: 移动光标到当前文件的最后一行;
- gg: 移动到当前文件的第一行;
- nG: n为数字,移动到当前文件的第n行;
- 在插入模式下:ctrl-w删除前一个单词;ctrl-u 删除到行首;
- 在当前行正好处于窗口顶部和底部时,有时需要滚动屏幕,用zz命令可以把当前行显示在窗口正中;
- R可由普通模式进入替换模式;
- R,空格b<Esc> 表示用",空格b"替换原来的",空格B"
- viw 高亮选择指定文本
- iw:当前单词,aw:当前单词及一个空格,iW:当前字串,is:当前句子,ip:当前段落
- <ctrl-g>可以在可视模式及选择模式间切换。如果在选择模式中输入任何可见字符的话,此字符会替换所选内容并切换到插入模式
- V :激活面向行的可视模式,gv:重选上次的高亮选取
- 高亮选区的范围由其两个端点界定.其中一端固定,而另一端可以随光标自由移动,可以用o来切换其活动的端点
- :t 复制行
- :t$ 把当前行复制到文本结尾
- :'<,'>t0 把高亮选中的行复制到文件开头
- :read !{cmd} 在shell中执行cmd,并把其标准输入插入到光标下方
- %命令允许在一组开闭括号间跳转
- c% 剪切当前括号的内容到 "寄存器
- 寄存器
- 在外部程序中用剪切或复制命令获取了文本,可以用过 "+p 命令将其粘贴到vim内部;
- 在vim的复制和删除命令之前加入"+,相应文本将被捕获到系统剪切板
实际例子
(a)列出当前文件夹下的所有文件(包含全路径)
- 在普通模式下key :read!ls (提取当前文件夹下的所有文件名)
- 手动把当前文件夹的路径粘贴到文件第一行
- Key <shift+v> 选中第一行
- Key <"ay> //把当前选定内容存入寄存器a
- Key <ctrl +v >选中指定行后key<shift+i>
- Key <ctrl +ra> //插入a 寄存器的内容
(b) 例化module提取所有port
Dut u_dut(.a(a),
.b(b));
- <shift+v> 选中module定义的第一行
- Key % 匹配括号进而选定所有port
- Key o 切到选中区域的开头
- Key <:normal f,i() enter>
(c) 跨文件复制粘贴
- Vim打开一个文件,比如 a.cpp
- 在普通模式下,输入<:sp>横向切分一个窗口
- 在普通模式下,key<:e b.cpp>,在另外一个窗口打开另外一个文件
- 切换到a.cpp所在窗口,在普通模式下,把光标移到你需要复制内容的起始行,然后输入你想复制的行的数量,在行数后面接着输入yy,就将内容复制到临时寄存器中(在普通模式下ctrl+w,再按一下w,可以在两个窗口之间切换)
- 切到目标文件窗口,把光标移动到你需要插入的位置,按p即可复制
(d) 用迭代求值的方式给列表编号
- :let i=1
- qa
- I<ctrl r>=i<Enter>)<Esc> //表达式寄存器"=,可以输入vim脚本表达式并按<Enter>执行
- :let i+=1
- q
- jVG 选中其余所有行
- :'<,'>normal @a