转自:http://www.cnblogs.com/ypchenry/archive/2012/05/28/2520705.html
相信每一vim本书都会介绍给初学者一个叫vimtutor的,可以花几十分钟时间跟着过一边。我总结一下最近看的
移动
只列我用的比较多的命令,所有的注释都用"(vim脚本注释符)
1 h "左 2 j "下 3 k "上 4 l "右,not left 5 w "光标移动到下一个单词的首字符 a word forward 6 b "光标移动到上一个单词的首字符 7 e "光标移动到下一个单词的尾字符 8 ge "光标移动到上一个单词的尾字符 9 $ "将光标移动到当前行行尾 10 ^ "将光标移动到当前行第一个非空白字符 11 0 "将光标移动到当前行第一个字符
注: 1) 对于一个word(单词)边界的定义可以查看iskeyword选项.
2) 这些命令除了'0'命令以外都可以在前面接受一个记数,2$;上面所有命令可以在前面接受一些操作命令,如d$,dw等.
搜索和定位标记与滚屏
单字符搜索
1 f<a> "单字符搜索,fa是在当前行搜索下一个a,find a 2 F<a> "Fa是在当前行向前搜索上一个a 3 t<a> "ta是当前行搜索下一个a,光标停在a的前一个字符,to a 4 T<a> "与ta方向相反
单词搜索
1 /string "全文本搜索一个字符串,如要找到单词"main"要用 /main 2 如果文本有多个main,按下几次n就会移动到接下来的几个 3 main中去;n前面也可以接受数字计数,如3n,就会找紧接 4 着第三个main 5 6 ?string "与/string的功能相同,唯一的区别就是搜索的方向相反
注: 1)可以用:set noingorecase 忽略字符大小写
2)/和?命令都有记忆功能,可以用多次<UP>键选择搜索历史,记录命令最大的历史条数可以在会话viminfo上更改.
3) 搜索字符.*/?%$^[]等特殊字符要在前面加一个反斜杠转意
4) 搜索到孤立的单词,也就是前后都没有其他字符的(除了空格,制表符),如只搜the,不想搜到there或whether这样的,要用/<the>
5) 可以用:set hlsearch把要搜索的单词高亮显示,highlight search
定位
1 G "光标移动到文件的最后一行 2 15G "光标移动到文件的第15行 3 gg "光标移动到文件的第一行 4 45% "光标移动到文件45%处 5 H "光标移动到当前屏幕的最开始,head or home 6 M "光标移动到当前屏幕的中间,middle 7 L "光标移动到当前屏幕的最后,last
注: CTRL+G查看当前光标位置
标记
1)在光标所在位置用m命令实现标记,如ma,就把当前光标状态标记为a,使用`a就会回到此光标位置;用:marks命令查看标记列表
2):map设置简单的映射,如:map F5 i{<Esc>ea}<Esc> ,当光标在main这个单词的m上时,按下F5,这个命令会main变成{main}
滚屏
1 CTRL+u "窗口向上滚半屏 2 CTRL+d "窗口向下滚半屏 3 CTRL+e "向上滚一行,没太大实际意义 4 CTRL+y "向下滚一行 5 CTRL+f "向前滚一整屏 6 CTRL+b "向后滚一整屏 7 zz "当前行置于屏幕中央 8 zt "当前行置于屏幕顶端 9 zb "当前行置于屏幕底端
改动
1 x "删除一个字符 2 d "其后跟任何一个位移命令,将删除从当前光标到位移终点处的文本 3 内容,如dw,delete word 4 c "与d命令功能类似,不同的在执行完删除后命令进去Insert模式,change 5 dd "删除一整行 6 r "等待键入下一个字符替代当前光标下的那个字符,如5rx 7 p "把需要内容放到光标下,put 8 y "复制,yank 9 yy "复制一整行 10 "*yy "把一行内容复制到剪贴板 11 "*p "把剪贴板内容复制过来
定制VIM
在linux系统的家目录下建一个.vimrc文件(ubuntu和fedora都需要自己建), 然后在vimrc下写一些vim脚本命令就可以配置你的vim了,在vim配置文件上,要注意用户配置文件优先与系统配置文件,在增加vim plugin的时候要在~/.vim下mkdir plugin ftplugin 等等,把想用到的 plugin(在/usr/share/vim/vim73/plugin或ftplugin或syntax)放到刚才新建的相应的文件夹下,当然如果对vim脚本比较熟悉也可以自己写一个plugin。下面是我的vimrc部分内容。
1 set number 2 set nocompatible " 关闭兼容模式 3 filetype plugin indent on 4 syntax enable " 语法高亮 5 syntax on 6 set shortmess=atI " 去掉欢迎界面 7 set autoindent 8 set showcmd " 显示命令 9 set whichwrap=b,s,<,>,[,] " 退格键和方向键可以换行 10 set incsearch " 增量式搜索 11 set ignorecase " 搜索时忽略大小写 12 set ai " 自动缩进 13 set si " 智能缩进 14 set showmatch " 显示匹配的括号 15 set history=400 " vim记住的历史操作的数量,默认的是20 16 set autowrite 17 "从系统剪切板中复制,剪切,粘贴 18 map <F7> "+y 19 map <F8> "+x 20 map <F9> "+p
viminfo
时刻要注意有这么一个东西,她记录了 1)命令行历史记录和搜索命令历史记录 2)vim寄存器中的内容 3)文件中的标记 4)缓冲区列表 5)全局变量,每次推出vim时这些 信息都会存在viminfo文件中,下次启动vim时vim会读取viminfo中的内容并恢复这些信息。
可以用:set viminfo=string保存更多的东西,string指代要保存的东西,语法是一个选项字符跟一个参数,一对对的选项参数用逗号隔开,如:set viminfo='1000,:set viminfo='1000,f2
string里的可选选项有
1 ' 为多少文件保存标记信息 2 f 是否保存全局标记,f0不保存,f1保存 3 < 每个寄存器保存多少行 4 : 要保存冒号命令的历史记录数 5 @ 要保存的输入历史记录数 6 / 要保存的搜索命令历史记录数 7 ! 以大写开始并不含所有小写字母的全局变量 8 h 开始是禁用hlsearch选项 9 % 缓冲区列表 10 c 使用'encoding'选项中的方法进行字符编码转换 11 n viminfo文件名字,必须是最后一项
编辑多个文件
1)在vim窗口下可以用:edit 编辑两外一个文件,不需要重新打开一个vim窗口,如:edit 1.c
2) 启动vim是打开指定多个文件,如vim 1.c 2.c 3.c,:next跳转到下一个文件,:previous跳转到上一个文件,但跳转之前要保存当前文件,否则报错,所以最好用:wnext和:wprevious; :args显示整个文件列表和当前正在编辑的文件;:last和:first跳转到最后和最前一个文件。
分割窗口
1 :split "横着分割 2 :new "横着添加一个新窗口 3 :vsplit "竖着分割 4 :vnew "竖着添加新窗口 5 CRTL+W w "按顺序切换小窗口 6 CRTL+W h 7 CRTL+W j 8 CRTL+W k 9 CRTL+W l "按方向切换 10 :qall "关闭所有窗口 11 :wall "保存所有窗口 12 vimdiff 1.c 2.c "创建一个垂直分割窗口比较这两个文件不同的地方
页签
:tabedit filename 在正在编辑的vim窗口建一个叫filename 的页签
:tab split 新建一个页签
gt命令或鼠标点击切换页签
程序员的vim
1)CTRL+Z挂起vim,fg命令回到vim挂起前状态
2)zf创建折行,zo打开折行,zc关闭折叠
3)tags,ctags *.c 为所有.c文件创建tags,ctags -R 将当前目录下包括子目录所有tags生成一个大的tags;:tag functionname转到fuctionname函数的定义处,也可以将光标放到函数名处,按下CRTL+]达到一样的效果;:ptag 获取函数参数列表;:stag 分屏显示
注:可以下一个taglist(具体怎么设置google一下就知道了),显示tag的GUI,不过之前要安装Exuberant Ctags,vim的taglist不支持gnu的ctags
4)假设正在编辑一个.c文件,光标在#include<sys/unistd.h>的左尖括号后面,此时按下gf(Normal模式),vim就会找到unistd.h头文件定义的地方