[转好] 记性不如烂笔头2 VIM操作技巧,持续更新。
1. 查找
/xxx(?xxx)表示在整篇文档中搜索匹配xxx的字符串,/表示向下查找,?表示
向上查找.其中xxx可以是正规表达式
*(#)当光标停留在某个单词上时,输入这条命令表示查找与该单词匹配的
下(上)一个单词.同样,再输入n查找下一个匹配处,输入N反方
向查找.
g*(g#)此命令与上条命令相似,只不过它不完全匹配光标所在处的单词,而
是匹配包含该单词的所有字符串.
gd本命令查找与光标所在单词相匹配的单词,并将光标停留在文档的非
注释段中第一次出现这个单词的地方.
%本命令查找与光标所在处相匹配的反括号,包括()[]{}
f(F)x本命令表示在光标所在行进行查找,查找光标右(左)方第一个x字符.
找到后:
输入;表示继续往下找
输入 , 表示反方向查找2. 快速移动光标
在vi中,移动光标和编辑是两件事,正因为区分开来,所以可以很方便的进行光标定
位和编辑.因此能更快一点移动光标是很有用的.
w(e)移动光标到下一个单词.
b移动光标到上一个单词.
0移动光标到本行最开头.
^移动光标到本行最开头的字符处.
$移动光标到本行结尾处.
H移动光标到屏幕的首行.
M移动光标到屏幕的中间一行.
L移动光标到屏幕的尾行.
gg移动光标到文档首行.
G移动光标到文档尾行.
c-f(即ctrl键与f键一同按下)本命令即pagedown.
c-b(即ctrl键与b键一同按下,后同)本命令即pageup.
''此命令相当有用,它移动光标到上一个标记处,比如用gd,*等查
找到某个单词后,再输入此命令则回到上次停留的位置.
'.此命令相当好使,它移动光标到上一次的修改行.
`. 此命令相当强大, 它移动光标到上一次的修改点.3. 拷贝, 删除与粘贴
在vi中y表示拷贝,d表示删除,p表示粘贴.其中拷贝与删除是与光标移动命令
结合的,看几个例子就能够明白了.
yw表示拷贝从当前光标到光标所在单词结尾的内容.
dw表示删除从当前光标到光标所在单词结尾的内容.
y0表示拷贝从当前光标到光标所在行首的内容.
d0表示删除从当前光标到光标所在行首的内容.
y$表示拷贝从当前光标到光标所在行尾的内容.
d$表示删除从当前光标到光标所在行尾的内容.
yfa表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
dfa表示删除从当前光标到光标后面的第一个a字符之间的内容.
特殊地:
yy表示拷贝光标所在行.
dd表示删除光标所在行.
D 表示删除从当前光标到光标所在行尾的内容.6. 替换
替换是vi的强项,因为可以用正规表达式来匹配字符串.以下提供几个例子.
:s/aa/bb/g将光标所在行出现的所有包含aa的字符串中的aa替换为bb
:s/\<aa\>/bb/g将光标所在行出现的所有aa替换为bb,仅替换aa这个单词
:%s/aa/bb/g将文档中出现的所有包含aa的字符串中的aa替换为bb
:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除.8. 宏替换
vi不仅可以用abbr来替换文字,也可以进行命令的宏定义.有些命令输起来很费劲,
因此我把它们定义到<F1>-<F12>上,这样就很方便了.这些配置可以预先写到~/.vimrc
(windows下为$VIM/_vimrc)中,写进去的时候不用写前面的冒号.
:nmap<F2>:nohls<cr>取消被搜索字串的高亮
:nmap<F9><C-W>w命令模式下转移光标到不同窗口
:imap<F9><ESC><F9>输入模式下运行<F9>
:nmap<F12>:%s=*$==<cr>删除所有行尾多余的空格.
:imap<F12><ESC><F12>同上
:java中:(注,这里为什么说java中,因为以下定义对其他文件格式不起作用,下文
会说到如何实现这一点)
:nmap<F3>:compjavac<CR>:mak-d.%<CR>
此命令用javac编译java文件,它会自动将光标定位到出错点.不过这需要定
义一个javac.vim文件在$VIM/compiler下,在javac.vim里面只有两行字:
setlocalmakeprg=javac
setlocalerrorformat=%A%f:%l:\%m,%-Z%p^,%-C%.%#
:nmap<F4>:compant<CR>:mak<CR>
此命令用ant编译java文件,它会自动将光标定位到出错点.一般来说,安装
vim后已经有了compiler/ant.vim文件,因此这个命令可以直接使用.但是需要
在当前目录下有build.xml文件,当然还必须安装ant才行.
:nmap<F5>:cl<CR>此命令用于查看所有的编译错误.
:imap<F5><ESC><F5>
:nmap<F6>:cc<CR>此命令用于查看当前的编译错误.
:imap<F6><ESC><F6>
:nmap<F7>:cn<CR>此命令用于跳到下一个出错位置.
:imap<F7><ESC><F7>
:nmap<F8>:cp<CR>此命令用于跳到上一个出错位置.
:imap<F8><ESC><F8>
:nmap<F11>:JavaBrowser<cr>
此命令用于在窗口左部分割出一个新窗口,里面的内容是java的资源树,包括
本文件中出现的类,类的成员变量及成员方法,就好像JCreator表现的那样.
在这个窗口中输入?会看到帮助.嘿嘿,很好用,不过需要ctags支持.
:imap<F11><ESC><F11>