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 ----> 切回文本方式显示
:%!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/ #不区分大小写
:set makeprg=string 指定make程序(默认就是‘make‘)
可设置errorformat选项用于编译出错时vim进行错误位置定位,GCC格式的errorformat设置:%f:%l:\%m
:cl 列出错误
:cn 让光标指向下一个错误
:cp 让光标指向上一个错误
:cnew 从头开始
^本行第一个非空字符
H 移动到视窗的第一行
b 移动到本字/上个字的第一个字母
可用 :2match 和 :3match 匹配多组关键字
匹配高亮高级玩法
:highlight MyGroup ctermbg=green guibg=green
:let m = matchadd("MyGroup", "TODO")
:call matchdelete(m)
:echo getmatches()
: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 从头开始
光标定位
0 本行第一个字符 ^本行第一个非空字符
$ 本行最后一个字符
h/j/k/l 左/下/上/右,前面可加数字
CTRL-b 向上一页 [PageUp]
CTRL-f向下一页 [PageDown]
CTRL-u 向上半页 CTRL-d向下半页
M 移动到视窗的中间行
L 移动到视窗的最後行
L 移动到视窗的最後行
b 移动到本字/上个字的第一个字母
e移动到本字/下个字的最後一个字母
w移动到下个字的第一个字母
nG 移动到第 n 行
gg 文件头
G 文件尾
% 跳转到光标所在括号(如(,{等)的相匹配的另一个括号处,或#if与#endif之间跳转。
[{ 跳转到当前代码块的开头
[{ 跳转到当前代码块的开头
]} 跳转到当前代码块的结尾
n{ 左括弧移动到段落的最前面,前面加上数字可以指定往前移动 n 个段落 段落是以段落间的空白 行界定
n} 右括弧移动到下个段落的最前面,前面加上数字可以指定往後移动 n 个段落
[[ 跳转到上一个函数开头(zws)]] 跳转到下一个函数开头(zws)
gd 跳转到当前变量的定义处。u取消刚才的操作
^R 重做被取消的修改
.重复刚才的操作
插入
a 从游标所在位置後面开始新增资料,游标後的资料随新增资料向後移动。 A 从游标所在列最後面的地方开始新增资料。
i 从游标所在位置前面开始插入资料,游标後的资料随新增资料向後移动。
I 从游标所在列的第一个非空白字元前面开始插入资料。
o 在游标所在列下新增一列并进入输入模式。
O 在游标所在列上方新增一列并进入输入模式。
修改
r 修改游标所在字元, r 後接著要修正的字元。 R 进入取代状态,新增资料会覆盖原先资料,直到按 [ESC] 回到指令模式下为止。
cw 进行修改当前单词,
剪切
s删除游标所在字元,并进入输入模式。S删除游标所在的行,并进入输入模式。
x 删除游标所在字元。
d 剪切
de剪切当前光标所在字符到所在单词的最后一个字符;
dd剪切当前行
D删除至行尾,相当于d$ (zws)
Nd剪切多行(N代表数量) 还可与其他进行光标定位的快捷键(如0,^,$,}等)联合操作。
复制
y 复制(用法和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
/ 正向查找
?反向查找
n 保持上次的方向寻找下一个
N 与上次查找方向反向寻找下一个
* 跳到下一个与当前单词匹配的单词首字符
# 跳到上一个与当前单词匹配的单词首字符
此命令查找由grep风格的正则表达式指定的匹配模式, 并将其替换为由string指定的字符串
[address values] 可以是一个或是由逗号分开的两个辅助修改标志. (下面的x代表一个整数)
. 表示当前行(即光标所在的行, 译者注)
$ 当前文件的最后一行
% 整个文件(即对每一行, 等价于1,$ )
x 当前文件的第x行
+x 从当前行开始下面的第x行(如果当前行为第1行, 则+3 代表第4行)
-x 从当前行开始上面的第x行(如果当前行为第4行, 则-3 代表第1行)
g 全部,替换该行中所有匹配的字符串.
c 询问,在每次替换之前询问用户是否确定要进行替换.
N 第N次,只替换在一行中第N个匹配的字符串
(如果没有指定这些辅助修饰标志, 则vim默认为只替换一行中第一个匹配的字符串)
-r 是降序排序
-n 是按数字大小排序
-k 表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束
-t 后面跟分隔符,缺省是空格
n 保持上次的方向寻找下一个
N 与上次查找方向反向寻找下一个
* 跳到下一个与当前单词匹配的单词首字符
# 跳到上一个与当前单词匹配的单词首字符
替换
:[address] s//string/[g|c|N] (where N is an integer value). 此命令查找由grep风格的正则表达式指定的匹配模式, 并将其替换为由string指定的字符串
[address values] 可以是一个或是由逗号分开的两个辅助修改标志. (下面的x代表一个整数)
. 表示当前行(即光标所在的行, 译者注)
$ 当前文件的最后一行
% 整个文件(即对每一行, 等价于1,$ )
x 当前文件的第x行
+x 从当前行开始下面的第x行(如果当前行为第1行, 则+3 代表第4行)
-x 从当前行开始上面的第x行(如果当前行为第4行, 则-3 代表第1行)
g 全部,替换该行中所有匹配的字符串.
c 询问,在每次替换之前询问用户是否确定要进行替换.
N 第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
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个像素
: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