vim常识

Posted realplay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim常识相关的知识,希望对你有一定的参考价值。



:h  XXX
    帮助
:X    对文件进行加密
:set key= 取消加密 
:abbr     别名,可用来使用简写或放置输入错误,编辑器会自动替换。如:abbr ms microsoft, :abbr corss cross
:!cmd     执行外部命令cmd
:sort     排序
:n,mw filename    将第 n 行到第 m 行 的文字存放的所指定的 filename 里去
 
:%!xxd        ----> 切换到十六进制显示
:%!xxd -r    ----> 切回文本方式显示

书签设置
mx    用于设置书签
‘x    用于从书签返回;
(其中的x可以为任何字母, 但只能记录当前文件里的书签;退出vim后再次进入将不会保留这些书签) 
 
:set nu 显示行号
 
编程
ctags文件
由ctags命令(vim的伴生工具)生成,如ctags *会在当前目录下创建一个名为tags的文件。包含当前目录下所有C/C++文件中的相关信息。 

包含文件搜索 :h include-search 

跳转到某程序元素定义处的三种方法: 
1、vim -t foo_bar 
该命令将会打开包含foo_bar定义的文件并定位到定义的那一行。 
2、如果已经在vim中,可用 :ta foo_bar来定位。 
可设置 autowrite(aw)选项在跳转时自动保存当前文件。 
3、在该元素上按ctrl-]。 
多数telnet都允许使用命令telnet -E hostname来打开或关闭脱字符^],  
或者用telnet -e escape hostname来指定另外一个脱字符来代替^],  
此外, 如果可能的话, 可以使用rsh来代替telnet来避免这个问题。 
4、如果定义就在当前文件,可直接用输入进行定位。 
如果vim不在在“tags”文件所在的目录下运行,则要用“:set tags=”命令设定“tags”文件的路径才能找到“tags”文件。 
(相关命令:man ctags, :h ctags) 
 
c语言风格缩进
:set cindent 打开缩进模式 
:set shiftwidth=N 设置缩进量 
:set cino=string 设置cindent的选项 
:set cino 查看cindent的选项 
(相关命令:`:h shiftwidth‘,  ‘:h cindent‘, `:h cinoptions‘, `:h cinoptions-values‘, `:h cinkeys‘,  `:h cinwords‘ ) 
 
高亮
语法高亮
:syntax on/off 
搜索高亮
:hls
匹配高亮
highlight g1 ctermbg=green guibg=green
:match g1 /file                 #表示开头结尾的/也可以用"来代替
 
:match g1 /file|java/         #匹配多个关键字
:match g1 /file|Javac/    #不区分大小写
可用 :2match 和 :3match 匹配多组关键字
匹配高亮高级玩法
:highlight MyGroup ctermbg=green guibg=green
:let m = matchadd("MyGroup", "TODO")
:call matchdelete(m)
:echo getmatches()
:call clearmatches()
 
编译
:make 编译 
:set makeprg=string 指定make程序(默认就是‘make‘) 
可设置errorformat选项用于编译出错时vim进行错误位置定位,GCC格式的errorformat设置:%f:%l:\%m 
:cl    列出错误
:cn    让光标指向下一个错误 
:cp    让光标指向上一个错误 
:cnew    从头开始 
 
光标定位
本行第一个字符 
^本行第一个非空字符
本行最后一个字符
 
h/j/k/l    左/下/上/右,前面可加数字
 
CTRL-b 向上一页 [PageUp] 
CTRL-f向下一页 [PageDown] 
CTRL-u 向上半页 
CTRL-d向下半页
 
H 移动到视窗的第一行
M 移动到视窗的中间
L 移动到视窗的最後

移动到本字/上个字的第一个字母 
e移动到本字/下个字的最後一个字母
w移动到下个字的第一个字母
 
nG  移动到第 n 
gg 文件头
G   文件尾
 
%    跳转到光标所在括号(如(,{等)的相匹配的另一个括号处,或#if与#endif之间跳转。
[{    跳转到当前代码块的开头
]}    跳转到当前代码块的结尾
n{  左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落 段落是以段落间的空白 行界定
n}  右括弧移动到下个段落的最前面,前面加上数字可以指定往後移动 n 个段落 
[[    跳转到上一个函数开头(zws)
]]    跳转到下一个函数开头(zws)
gd    跳转到当前变量的定义处。
 
编辑与删除
u取消刚才的操作
^R 重做被取消的修改
.重复刚才的操作
 
插入
从游标所在位置後面开始新增资料,游标後的资料随新增资料向後移动。 
从游标所在列最後面的地方开始新增资料。 
从游标所在位置前面开始插入资料,游标後的资料随新增资料向後移动。 
从游标所在列的第一个非空白字元前面开始插入资料。 
在游标所在列下新增一列并进入输入模式。 
在游标所在列上方新增一列并进入输入模式。 
 
修改
修改游标所在字元, r 後接著要修正的字元。 
进入取代状态,新增资料会覆盖原先资料,直到按 [ESC] 回到指令模式下为止。 
cw 进行修改当前单词, 
 
剪切
s删除游标所在字元,并进入输入模式。
S删除游标所在的行,并进入输入模式。
删除游标所在字元。 
剪切 
de剪切当前光标所在字符到所在单词的最后一个字符; 
dd剪切当前行
 D删除至行尾,相当于d$ (zws)
Nd剪切多行(N代表数量) 
还可与其他进行光标定位的快捷键(如0,^,$,}等)联合操作。 
 
复制
复制(用法和d相同),后面可加进行定位的快捷键
y<数字>y 复制多行
 
粘贴
p/P 在当前字符后/前粘贴,前面可加数字,表示粘贴次数 
 
插入文件名: 在编辑模式下输入CTRL+R%
 
剪贴板缓冲
"xY 用于剪切或复制到一个名为x的缓冲区(Y 代表任何的删除(如d或x)或取样命令(如y)), 
"xZ 用于粘贴内容(Z代表粘贴命令p 或 P),其中x可以为任何字母, 也可在跳转到另一文件中时继续生效。 
 
q录制宏,如qa录制名称为a的宏,再次按q结束录制。共可录制26个宏,@a执行宏a。
 
插入行号
:%s/^/^I/ 每一行的行首添加一个TAB字符 
:$ 到文件的末行 
:let end=line(".") 末行的行号 ==〉变量 END,函数line的功能是取得指定行的行号,此处参数"."表示当前行 
:1 到文件的首行 
"------------------------------------------ 
:let num=1 1 ==〉计数器 
:while num<=end 
:let line=getline(".") 取当前行的内容 ==〉变量 LINE 
:let line=substitute(line,$,num,"") 在变量 LINE 的前面置入行号,注意此处 $代表匹配空字符,等效于‘^‘(zws?),如果改为‘$‘,则是匹配行尾 
:call setline(".",line) 将变量 LINE 的内容写回当前行 
:+ 下移一行 
:let num=num+1 计数器加一 
:endwhile 循环执行,直到文件结束 
"------------------------------------------ 
 
######## 插入行号
:g/^/exe ":s/^/".line(".")
查找
/str1
/str1|str2
 
/ 正向查找 
?反向查找
保持上次的方向寻找下一个 
与上次查找方向反向寻找下一个 
跳到下一个与当前单词匹配的单词首字符 
跳到上一个与当前单词匹配的单词首字符 
 
替换
:[address] s//string/[g|c|N] (where N is an integer value). 
此命令查找由grep风格的正则表达式指定的匹配模式, 并将其替换为由string指定的字符串 
[address values] 可以是一个或是由逗号分开的两个辅助修改标志. (下面的x代表一个整数) 
表示当前行(即光标所在的行, 译者注) 
当前文件的最后一行 
整个文件(即对每一行, 等价于1,$ ) 
当前文件的第x行 
+x 从当前行开始下面的第x行(如果当前行为第1行, 则+3 代表第4行) 
-x 从当前行开始上面的第x行(如果当前行为第4行, 则-3 代表第1行) 
全部,替换该行中所有匹配的字符串. 
询问,在每次替换之前询问用户是否确定要进行替换. 
第N次,只替换在一行中第N个匹配的字符串 
(如果没有指定这些辅助修饰标志, 则vim默认为只替换一行中第一个匹配的字符串) 
(即等价于address1, address2s//string/1 )
 
排序(外部程序)
:1,12!sort -r -n -k4.1,5
-r 是降序排序
-n 是按数字大小排序
-k 表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束
-t 后面跟分隔符,缺省是空格
 
######## 将第2-10行中的13改为连续数字
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
configure xdsl line 1/1/2/13 spectrum-profile 99 service-profile 99 admin-up  
:let i=1 
:2,10g/^/s//13/="/".i/ |let i=i+1
其中"g/^/"不可少,否则会一次性将所有行改为同一个数字。
 
######## 窗口
:vs 或者 :vsplit --vertical split,将当前窗口竖直分割,当前文件在两个窗口中显示 
:vs filename 将当前窗口竖直分割,文件filename在新窗口中显示 
:sp 或者 :split 将当前窗口水平分割,当前文件在两个窗口中显示 
:sp filename 将当前窗口竖直分割,文件filename在新窗口中显示 
Ctrl-W + 扩大窗口(多个窗口整体扩大) 
Ctrl-W - 缩小窗口(多个窗口整体缩小) 
Ctrl-W h 移动光标到左边窗口 
Ctrl-W j 移动 光标到下边窗口 
Ctrl-W k 移动 光标到上边窗口 
Ctrl-W l 移动 光标到右边窗口 
:res(ize) +N 把当前窗口高度增加N个像素 
:res(ize) -N 把当前窗口高度减少N个像素 
:vertical res(ize) +N 把当前窗口宽度增加N个像素 
:vertical res(ize) -N 把当前窗口宽度减少N个像素
 
 
列编辑
vim for windows: ctrl+q
vim for linux: ctrl+v

使用Astyle
http://sourceforge.net/projects/astyle/files/
version 2.05 works well so far.
:%! astyle
 
贪婪搜索
文本ababab
/a.*b 将匹配ababab (默认贪婪)
/a.{-}b 将只匹配ab
 
缩进
1. 按v进入visual状态,选择多行,用>或<缩进或缩出
2. == (连按=两次), 或对多行用n==重新排版。使用gg=G可对整篇代码进行排版。
set smartindent
set tabstop=4
set shiftwidth=4 #用<>进行缩进的空格数
set expandtab
set softtabstop=4
 






































以上是关于vim常识的主要内容,如果未能解决你的问题,请参考以下文章

VIM 代码片段插件 ultisnips 使用教程

vim常识

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

vim代码片段插件ultisnips的使用