vim使用技巧
本文参考了vim官方网站的文档。
-
使用
*
键可以向后搜索光标所在位置的单词。反之,使用#
键可以向前搜索光标所在位置的单词。第一次使用*
或者#
进行搜索之后,则可以使用N
或Shift-N
继续进行搜索。另外,如果设置了hlsearch
选项(:set hlsearch
)的话,那么使用* Shift-N
则可以标记当前的单词为高亮显示。 -
经常会遇到这样的情况,就是在命令行上输入含有一个长长的路径的命令
vi /home/username/linux/src/dir1/dir2/dir3/srcfile.c
,编辑结束之后发现需要编辑同一目录下的另一个文件,这时不得不在vi中重新输入长长的路径。而将下面的脚本放在vimrc文件(Unix下为~/.vimrc
,Windows下为_vimrc
)中即可快速输入路径:" Edit another file in the same directory as the current file " uses expression to extract path from current file's path " (thanks Douglas Potts) if has("unix") map ,e :e <C-R>=expand("%:p:h") . "/" <CR> else map ,e :e <C-R>=expand("%:p:h") . "\" <CR> endif
这样编辑完第一个文件之后,在vi中输入
,e
,然后就可以利用Tab键进行自动补齐了。 -
单词自动补齐:输入一个单词(例如函数、变量名等)的开头几个字母,然后按
Ctrl-N
或者Ctrl+P
键,vim会在当前文档中查找匹配的单词并自动将输入补齐。 -
使用
%
键可以查找匹配的括号。 -
使用
[{
和]}
命令可以跳转到光标所在程序块的开头和结尾。 -
如果当前光标处的单词是一个局部变量,则使用
gd
来跳转到该变量的定义处;如果当前光标处的单词是全局变量,则使用gD
来跳转到该变量的定义处。 -
[i
命令可以快速察看光标所在位置的变量的定义,[d
命令可以快速察看光标所在位置的宏的定义。 -
流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用
Ctrl-O
执行后退,使用Ctrl-I
执行前进。 相关帮助::help CTRL-O
:help CTRL-I
:help jump-motions
-
如果想在源程序中不使用TAB键并保证缩进为四字符,那么在 vimrc 中加入下列设置:
set tabstop=4 set shiftwidth=4 set expandtab
-
使用
set incsearch
之后可以在键入搜索关键字时即时显示匹配的位置。 -
使用
set hlsearch
可以将匹配进行高亮显示。进行一次搜索之后,执行:nohlsearch
或:noh
可以暂时关闭本次搜索结果的高亮显示。而使用:set nohlsearch
则可以永久关闭搜索高亮显示。 可以将:noh
命令映射到一个键上,例如:nmap <silent> <C-N> :silent noh<CR>
,这样就可以使用Ctrl-N
来关闭高亮显示。 -
当打开DOS格式文件时,每行的行末都会出现
^M
的字符。使用如下命令可以将DOS文件转换成Unix格式文件::%s/^M$//g
注意,^M的输入方法是Ctrl-V Ctrl-M。
-
使用如下命令给正在编辑的文件添加行号:
:%!cat -n
-
颠倒整个文件中所有行的顺序:
:g/^/m0
-
Ctrl-A
可以将光标所在位置处的数字加一,Ctrl-X
可以将光标所在位置处的数字减一。 -
关于undo和redo:
u
命令为取消上一个操作;U
为取消当前行的所有操作,即恢复当前行到原始状态;Ctrl-R
为重复刚刚取消的操作。 -
下面几个例子:
:r foo.txt 将foo.txt插入到当前光标的位置 :0r foo.txt 将foo.txt插入到第一行之前 :r !ls 在当前光标处插入文件列表 :$r !pwd 在最后一行的下方插入当前路径
-
用
.
命令重复上一次编辑命令。用@:
命令重复上一次在命令行上执行的命令。 -
用
xp
来交换两个字符,用ddp
来交换两行。 -
在两个不同的 vim 之间复制文本:
" transfer/read and write one block of text between vim sessions " Usage: " `from' session: " ma " move to end-of-block " xw " " `to' session: " move to where I want block inserted " xr " if has("unix") nmap xr :r $HOME/.vimxfer<CR> nmap xw :'a,.w! $HOME/.vimxfer<CR> vmap xr c<esc>:r $HOME/.vimxfer<CR> vmap xw :w! $HOME/.vimxfer<CR> else nmap xr :r c:/.vimxfer<CR> nmap xw :'a,.w! c:/.vimxfer<CR> vmap xr c<esc>:r c:/.vimxfer<cr> vmap xw :w! c:/.vimxfer<CR> endif
-
使用
ga
可以看到光标下的字符的ASCII值。 -
删除所有空行:
:%g/^$/d
-
如果你使用vim的win32版,那么在
_vimrc
文件中加入下面这一行可以使得窗口在打开时自动最大化:au GUIEnter * simalt ~x
关于此命令的帮助请参见:
:he win16-maximized
-
使用
:X
或:set key=
命令可以为文件加上密码,保存文件时该文件将被加密。再次打开该文件时vim将询问密码。使用:X
并输入空密码或者:set key=
命令可以解除加密。 -
使用
[I
命令可以在所有打开的文件中搜索光标所在位置的单词,并将其以列表的方式显示在屏幕下方。 -
使用vim作为IE的源代码查看程序。由于IE给源代码查看程序传递参数时并不会为带空格的文件名增加引号,所以需要自己写一段脚本。
’— gVim.vbs ‘function: Start gvim, combining multiple arguments to single file argument. ‘changes: 20010905: Quoted ‘oWShell.Run’ filename argument, allowing spaces. ‘ 20010518: Created. ‘author: Freddy Vulto fvu@fvu.myweb.nl
' Making variable declaration mandatory option explicit
dim oWShell, sArg, sFile
' Create script object set oWShell = CreateObject("wscript.shell") ' Loop through arguments for each sArg in wscript.arguments ' Add argument to filename sFile = sFile & sArg & " " next ' Remove excess space sFile = Trim(sFile) ' Run Vim with file argument. Additional arguments: ' -R: View file readonly ' -c "set syntax=html": Use HTML syntax-highlighting ' NOTE: Use "-c ""set ft=html""" to make it work for Vim v6. oWShell.Run _ """C:\Vim\Vim62\gvim.exe """ & _ "-R """ & sFile & """ " & _ "-c ""set syntax=html""" ' Destroy script object set oWShell = NOTHING
然后在注册表中添加下面的值:
HKLM\Software\Microsoft\Internet Explorer\View Source Editor\Editor Name
(Default)=C:\Vim\gvim.vbs