vim 使用技巧

1. 使用 * 键可以向后搜索光标所在位置的单词。反之,使用 # 键可以向前搜索光标所在位置的单词。第一次使用 * 或者 # 进行搜索之后,则可以使用 N 或 Shift-N 继续进行搜索。另外,如果设置了hlsearch选项(:set hlsearch)的话,那么使用 * Shift-N 则可以标记当前的单词为高亮显示。

2. 经常会遇到这样的情况,就是在命令行上输入含有一个长长的路径的命令 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键进行自动补齐了。

4. 单词自动补齐:输入一个单词(例如函数、变量名等)的开头几个字母,然后按Ctrl-N或者Ctrl+P键,vim会在当前文档中查找匹配的单词并自动将输入补齐。

6. 使用 % 键可以查找匹配的括号。

7. 使用 [{ 和 ]} 命令可以跳转到光标所在程序块的开头和结尾。

8. 如果当前光标处的单词是一个局部变量,则使用 gd 来跳转到该变量的定义处;如果当前光标处的单词是全局变量,则使用 gD 来跳转到该变量的定义处。

9. [i 命令可以快速察看光标所在位置的变量的定义,[d 命令可以快速察看光标所在位置的宏的定义。

10. 流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用 Ctrl-O 执行后退,使用 Ctrl-I 执行前进。相关帮助: :help CTRL-O :help CTRL-I :help jump-motions

12. 如果想在源程序中不使用TAB键并保证缩进为四字符,那么在 vimrc 中加入下列设置:

       set tabstop=4
set shiftwidth=4
set expandtab

13. 使用 set incsearch 之后可以在键入搜索关键字时即时显示匹配的位置。

14. 使用 set hlsearch 可以将匹配进行高亮显示。进行一次搜索之后,执行 :nohlsearch 或 :noh 可以暂时关闭本次搜索结果的高亮显示。而使用 :set nohlsearch 则可以永久关闭搜索高亮显示。可以将:noh命令映射到一个键上,例如:nmap <silent> <C-N> :silent noh<CR>,这样就可以使用Ctrl-N来关闭高亮显示。

26. 当打开DOS格式文件时,每行的行末都会出现^M的字符。使用如下命令可以将DOS文件转换成Unix格式文件:

:%s/^M$//g

注意,^M的输入方法是Ctrl-V Ctrl-M。

28. 使用如下命令给正在编辑的文件添加行号: :%!cat -n

29. 颠倒整个文件中所有行的顺序: :g/^/m0

30. Ctrl-A 可以将光标所在位置处的数字加一,Ctrl-X可以将光标所在位置处的数字减一。

39. 关于undo和redo: u 命令为取消上一个操作;U 为取消当前行的所有操作,即恢复当前行到原始状态;Ctrl-R为重复刚刚取消的操作。

40. 下面几个例子:

:r foo.txt       将foo.txt插入到当前光标的位置
:0r foo.txt 将foo.txt插入到第一行之前
:r !ls 在当前光标处插入文件列表
:$r !pwd 在最后一行的下方插入当前路径

44. 用 . 命令重复上一次编辑命令。用 @: 命令重复上一次在命令行上执行的命令。

47. 用 xp 来交换两个字符,用 ddp 来交换两行。

66. 在两个不同的 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

67. 使用 ga 可以看到光标下的字符的ASCII值。

72. 删除所有空行: :%g/^$/d

88. 如果你使用vim的win32版,那么在_vimrc文件中加入下面这一行可以使得窗口在打开时自动最大化:

au GUIEnter * simalt ~x

关于此命令的帮助请参见:

:he win16-maximized

89. 使用:X或:set key=命令可以为文件加上密码,保存文件时该文件将被加密。再次打开该文件时vim将询问密码。使用:X并输入空密码或者:set key=命令可以解除加密。

116. 使用 [I 命令可以在所有打开的文件中搜索光标所在位置的单词,并将其以列表的方式显示在屏幕下方。

118. 使用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 <[email protected]>

' 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

你可能感兴趣的:(vim 使用技巧)