VIM学习一: VIM命令学习及插件介绍

时间:2023-08-28 09:18:44

一、光标移动及编辑命令(含查找替换)

【打开关闭窗口】
:e file或:open file       打开新文档
:q或者ctrl+w+q         关闭当前视图的窗口
:tab split将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)

vim -b datafile vim打开二进制文件
:%!xxd 转换为十六进制
:%!xxd -r 转换回二进制

【保存文件】
:w filename 当前文件另存为filename文件

:w! filename  强制写文件

:e!  放弃修改,重新读文件

【移动光标】
h     方向键左←
j     方向键下↓
k     方向键上↑
l     方向键右→
3j 或者 3↓         把游标下移3行
3→                 把游标右移3个字符
0(数字) 将光标移到当前行首(就是行首,不是第一个字符)
^        将光标移到当前行的第一个非空字符
输入$, 将光标移到当前行尾
数字n + 空格         向右移动n个字符的位置
数字n + Enter键     向下移n行
:n           跳到第n行 

【#ifdef宏之类的跳转】
% 光标处在#ifXX #else #endif上时,按%可以在这个队列中循环
[# 光标处在#ifdef和#endif之间的行时,(不能在#XXX上,只能在中间行),按[#可以跳到#ifdef之类的开始处。若没有,这不跳转。
]# 光标处在#ifdef和#endif之间的行时,(不能在#XXX上,只能在中间行),按]#可以跳到#else 或#endif相应处。若没有,这不跳转。

【函数段级别的跳转】
% 光标指向{或},可以查找该段落的匹配处
[[ 向上找函数的入口{处,即光标处在代码段的中间行时(比如函数的中间行),按[[跳转到函数的入口{处。(若在函数外,或者函数的{处,则跳转到上一个函数的{处)
][ 向下找函数的出口}处,即光标处在代码段的中间行时(比如函数的中间行),按][跳转到函数的结尾}处。(若在函数外,或者函数的}处,则跳转到下一个函数的}处)

【代码段级别的跳转】
% 光标指向{或},可以查找该段落的匹配处
[{ 向上找代码段的入口{处
]} 向下找代码段的出口}处
参考: http://www.cnblogs.com/CGDeveloper/articles/1941085.html

【翻屏命令】
ctrl + f 向下移一页
ctrl + b 向上移一页
ctrl + d 向下移半页
ctrl + u 向上移半页
【跳转命令】
:n  跳到第n行
H 移动到当前屏幕的第一行第一列
M 移动到当前屏幕的最中间那一行的第一列
L 移动到当前屏幕的最后一行第一列
gg 移动到整个文档的第一行,相当于1G
G 移动到整个文档的最后一行第一列
20g 移动到整个文档的第20行
【基础编辑命令】
. 重复上一次的那个动作(如复制黏贴删除等,撤销除外)
普通模式下输入q:            显示命令行命令历史的窗口
【删除】
x 小写x,删除光标后面的一个字符
X 大写X,删除光标前面的一个字符
数字n + x 删除光标后的n个字符,n可以大于改行后面字符的总个数,删除不会影响到下一行
数字n + X 同小x,只是往前删
d$ 删除这行光标之后的所有内容
d0 这个数字0表示,从改行的开始,一直删到光标的位置
dd 删除该行
数字n + dd 删除n行,如:2dd删除两行,即光标所在行及其下一行
d1G 从整个文档的第一行开始删,删到光标当前位置
dG 从光标开始删除,一直删到整个文档的最后一行
【复制与黏贴】
yy     复制游标所在的那一行
nyy     复制游标所在那行开始的n行
p 小写p    在游标所在行的下方,黏贴复制的内容
P 大写P    在游标所在行的上方,黏贴复制的内容
【撤销与回退】
u 撤销前一个动作
ctrl + r 重做刚撤销的那个动作
【搜索、查找】
:vim /pattern/ % 在当前打开文件中查找,按cw可以打开搜索到的结果列表
/word     向后查找字符串word
?word     向上查找字符串word
n     重复前一个按键的动作(如果是向后查找,则n表示往后找;如果是向前查找,则n表示往前看)
N     重复前一个按键动作的相反动作(如果是向后查找,则N表示往前找;如果是向前查找,则N表示往后看)
*        向下搜索光标所在词(全字匹配) 
g*        同上,但部分符合即可。 
#        向上搜索光标所在词(全字匹配) 
g#        同上,但部分符合即可。
/\<the\>     "\>" 是一个特殊的记号,表示只匹配单词末尾。类似地,"\<" 只匹配单词的开头。
【替换】
示例1:
:9,19s/_kitkat//
说明:从第9行到第19行,将字符串“_kitkat”替换为空,每行只替换第一次匹配项
示例2:
:%s/abc/def/g 将当前文本中的所有abc替换成def
示例3:
:100,200s/vbird/VBIRD/g 将第100行至200行之间的vbird替换为VBIRD
变种:
:1,$s/word1/word2/g
:1,$s/word1/word2/gc 在替换的基础上,增加确认操作【常用】

二、多窗口命令

 【多文档命令】
:ls 查看buffer list,即打开了多少个文件(带文件路径)
:files    查看vim一共打开了几个文档
:bn 下一个文件 
:bp 上一个文件 
:b num 切换文件(其中num为buffer list中的编号)
如果需要在编辑的同时,打开新文档,可以用命令:e file或:open file
:tab split将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)
:res+20 当前窗口多显示20行
【多窗口命令】
:sp可以水平分割(水平分割成上下两个窗口)当前窗格  :split
:vs可以垂直分割(垂直分割成左右两个窗口)当前窗格   :vsplit 
               ---按住ctrl-w键,松开,马上按一次方向键,则光标会切换到当前窗口的 左|下|上|右 侧的窗口
:qa 关闭所有窗口
:tab sp将在新标签页中,打开当前缓冲区中的文件(相当于把当前文件放大)(:tab vsp也可以)
按住ctrl-w键,松开,马上按一次方向键,则光标会切换到当前窗口的 左|下|上|右 侧的窗口
:ts core_init 找到这个函数的实现(:tag core_init)
:sp filename 在当前vi视图上打开一个分窗口显示filename,如果filename不填,则是打开当前文件

三、普通命令及VIM配置命令

 【括号匹配】
% 跳到配对的括号
[[ 跳到上一个函数的{括号处
]] 跳到下一个函数的{括号处
【折叠命令】
za 打开/关闭在光标下的折叠
zM 打开所有折叠
zR 关闭所有折叠
 【剪切板】
:reg 查看剪贴板
0寄存器存放刚复制的内容,1~9寄存器存放刚删除的内容
即yy命令将内容复制到0寄存器,dd命令不会修改该寄存器,故后面如果想复制该内容,直接用"0P即可
【查看历史纪录】
普通模式下输入q: 显示命令行命令历史的窗口

【任务切换快捷键】

ctrl+z 将当前任务(如vim窗口)隐藏到后台
jobs 查看所有的后台任务
fg <任务号> 把任务切换回前台(如果只有一个任务,fg就可以了,不用接任务号)
 【vim配置命令】
:set nu 显示行号
:set nonu 取消显示行号
ctrl+g  显示文本名字,和文件的总行数
:pwd 查看当前文件的路径
:! command 在不退出vi的情况下,执行命令command
:scriptnames 找出vim脚本,并显示路径
:version 查看版本号,及支持的插件
【vim映射】
:map 列出所有映射命令
下面是vim的使用map的示例:
:map \p i(<Esc>ea)<Esc>     以光标未开始,至该word结束,加括号(组合键\p,需要快速按,中间不能间隔太长时间)(先p再\也可以)(i进插入模式,esc退出插入模式,e移动到词尾,a在词尾后插入)
:map \c i{<Esc>ea}<Esc>     以光标未开始,至该word结束,加花括号
:map <F2> GoDate: <Esc>:read !date<CR>kJ     定义F2快捷键,在文本末尾插入Date信息(G到文本的末尾,o在文本末尾的下一行插入,<Esc>退出插入模式,:read !date执行读取date的命令并完成插入,<CR>执行刚的命令,kJ将光标上移并将两行连接起来)

map <F2> :cw<CR>                                     为了快速打开/关闭搜索窗口
map <F3> :ccl<CR>
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

【vim颜色选择】
(系统自带的在/usr/share/vim/vim73/colors/路径)
亮色调推荐default/delek。就是用久了眼累。
暗色调里面koehler,molokai,inkpot,wombat,neon。从左到右对比度依次降低。我最近一直用neon,看起来非常舒服。至于molokai用这个写过html/CSS后彻底无爱。
字体我一直用droid sans mono,搭配neon配色效果最佳。
用了三年的desert+monaco字体

四、插件及其特有命令

 【ctags帮助命令】
:help ctags vim中运行这个命令,查看ctags的帮助文档
man ctags 执行linux命令,查看ctags帮助文档(与上面那个不是同一个文档)
map <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> vimrc中配置F12用于生成ctags
vi -t tags 打开 vi,并且将光标停留在 tag 定义的地方
:ts tag 同上,找到这个函数的实现,列出所有匹配到 tag 的结果
set tags=tags;/     这是告诉vim在当前目录找不到tags文件时请到上层目录查找。
1.安装ctags
yum install ctags
2.设置ctags的快捷键,打开vim,运行下面命令,则在当前目录下会生成tags文件
:map <F2> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
ctags的快捷键
ctrl-]
ctrl-o
把文件加入帮助列表的命令
.vim]$ vi doc/ 用vim打开doc目录,输入如下命令
:helptags. 命令没有空格
ctags帮助
linux命令 man ctags
vim命令 :help ctags 或:h ctags
【taglist】
:TlistToggle vim中运行这个命令,打开/关闭taglist窗口
:help taglist.txt vim中运行这个命令,查看taglist帮助文档
Ctrl-w 在两个窗口之间切换
切到targlist窗口后,可以使用快捷键:
- 折叠单个tag
+ 打卡单个折叠
x 将taglist放大或还原成侧边
u 更新taglist
空格 在下方显示tag原型定义
3.安装使用Taglist
2.打开配置文件~/.vimrc,加入以下两行:
let Tlist_Show_One_File=1  
let Tlist_Exit_OnlyWindow=1  
3.taglist快捷键
 在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭;
我们可以通过Ctrl-w快捷键或鼠标点击在Taglist窗口和编辑区之间切换焦点
【buffer管理器MiniBufferExplorer】
按下Ctrl+h/j/k/l,可以切换到当前窗口的上下左右窗口
【其他插件:原型自动补全】
【cscope】
1.软件安装
yum install cscope
2,插件拷贝,并放入对应目录
确定Vim已支持Cscope后,将文件http://cscope.sourceforge.net/cscope_maps.vim下载到~/.vim/plugin目录。
3.生成cscope
cscope -Rbq -f cscope.out
4.快捷键
           Ctrl-\ s 查找所有当前光标所在符号出现过位置。
           Ctrl-\ c 查找所有调用当前光标所在函数的函数。
cw命令,就能在编辑区下面quickfix窗口看到所有查找结果的列表
:help cscope vim中运行这个命令,查看cscope的帮助文档
man cscope 执行linux命令,查看cscope帮助文档(与上面那个不是同一个文档)
set cscopequickfix=s-,c-,d-,i-,t-,e- 在~/.vimrc中增加这条命令后,用ctrl-]等快捷键会自动跳到第一个索引到的位置
:cw 通过该命令,可以打开“Quickfix List”窗口,通过ctrl-w可以;退出那个窗口,需要指到那个窗口。
通过先生成cscope.file,再用cscope建立索引,可以更灵活的使用scope:

find . -type f ! -path "*/.git/*" ! -path "./*cscope*" ! -path "*/tags" > cscope.files
cscope -bkq -i cscope.files

:cs show可以查看当前加载的cscope   
如果vim中已经加入cscope.out的话,会与cscope.vim中的配置冲突,比如:/etc/vimrc中已经有
 VIM学习一: VIM命令学习及插件介绍
则.vim/plugin/cscope_maps.vim中的配置就会重复,结果报重复加载out文件的错误,解决方法是把.vim/plugin/cscope_maps.vim中加载out文件的代码删除。
cs find s/c/t/g/e/f/i/d tag
s(查找符号,不含注释及打印)
c(查找调用,不含定义和实现)
t(这个目录查找字符串)
g(查找定义,相当于ctags的ctrl-o)
e(当前文件查找字符串)
f(查找文件)
i(查找include该文件的文件)
d(查找该函数调用的所有子函数)
【配置1】其中的这句:
nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
在我的vim中无法工作, 但是我改成:
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
就可以正常工作了
【配置2】alias cscope='find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.define" -o -name "*.inc" -o -name "*.S" -o -name "*.s" -o -name "*.mk" -o -name "*.cfg" -o -name "*.xml" -o -name "Makefile" > cscope.files && cscope -bkq -i cscope.files'
~/.bashrc

五、FAQ

(1)vim黏贴缩进的问题:

解:在.vimrc中加一句:
set pastetoggle=<F9>
在黏贴代码之前,进入insert模式,按F9,就可以关闭自动缩进
 (2)vim的默认配置
答: /usr/share/vim/vim74/vimrc_example.vim 可以把他默认的配置拿到我们用户的配置下
 (3)ubuntu中vim不识别方向键:
ubuntu预装的是vim tiny版本,而需要的是vim full版本。执行下面的语句安装vim full版本:
   $sudo apt-get remove vim-common
   $sudo apt-get install vim
 (4)SecureCRT快捷键
Shift + Insert      粘帖
 (5)【待解决的问题】
窗口中鼠标操作

参考文档:

vim寄存器:
IBM的VIM帮助文档:
 SecureCRT配置显示彩色:
windows vim IDE环境打造:http://www.itboth.com/d/QbEJry/vim
http://www.cnitblog.com/hustwei/archive/2008/05/21/44034.aspx

经典vim插件功能说明-安装方法和使用方法介绍
http://www.picb.ac.cn/~xiaohang/vimwiki/tools/vim/classic_vim_plugins.pdf

http://blog.csdn.net/devil_2009/article/details/7006113