vim手册功能太多了,在此整理一些常用的供后期学习查阅
1、移动光标方式
j:上(同↑)
k:下(同↓)
h:左(同←)
l:右(同→)
+或Enter: 把光标移至下一行第一个非空白字符。
-: 把光标移至上一行第一个非空白字符。
G:文件底部
nG:n为数字,表示跳到文件第n行
w:下一个单词(word)词首
b:单词首(begin)
e:单词尾(end)
ge: 前移一个单词,光标停在上一个单词末尾;
f:查找 如fc把光标移到同一行的下一个c字符处
F:反向查找 如Fc把光标移到同一行的上一个c字符处
t:查找 如tc把光标移到同一行的下一个c字符前
T:反向查找 如Tc把光标移到同一行的上一个c字符后
;: 配合f & t使用,重复一次
,: 配合f & t使用,反向重复一次
):移至下一个句子的开头
(:移至上一句的开头
}:移至下一个段落的开头(以空白行分隔)
{:移至下一段的开头(以空白行分隔)
上面的操作都可以配合n使用,比如在正常模式下输入3l, 则光标向右移动3个字符

0:行首(第0个字符)
g0: 移到光标所在屏幕行行首
$:行尾(类似正则表达式语法)
n$:n行行尾(类似正则表达式语法)
g$: 移动光标所在屏幕行行尾。
^: 移动到本行第一个非空白字符。
g^: 同 ^ ,但是移动到当前屏幕行第一个非空字符处。
n|: 把光标移到第n列上。
:n<cr>:移动到第n行
:$<cr>:移动到最后一行
H:将光标移动到当前可见页面的顶部(High)
M:将光标移到当前可见页面的中间(Middle)
L:将光标移动到当前可见页面的底部(Low)
gg:文档顶部

n<Enter>    n为数字。光标向下移动n行(常用)

gd: 跳转到局部变量的定义处;
gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
g;: 上一个修改过的地方;
g,: 下一个修改过的地方;
gf:打开光标所在位置的文件名,一般是头文件 
ctrl+w f分屏打开文件
[[: 跳转到上一个函数块开始,需要有单独一行的{。
]]: 跳转到下一个函数块开始,需要有单独一行的{。
[]: 跳转到上一个函数块结束,需要有单独一行的}。
][: 跳转到下一个函数块结束,需要有单独一行的}。
[{: 跳转到当前块开始处;
]}: 跳转到当前块结束处;
[/: 跳转到当前注释块开始处;
]/: 跳转到当前注释块结束处;
%: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
[i 底部显示定义处信息

ci', di', yi':修改、剪切或复制'之间的内容。
ca', da', ya':修改、剪切或复制'之间的内容,包含'。
ci", di", yi":修改、剪切或复制"之间的内容。
ca", da", ya":修改、剪切或复制"之间的内容,包含"。
ci(, di(, yi(:修改、剪切或复制()之间的内容。
ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。
ci[, di[, yi[:修改、剪切或复制[]之间的内容。
ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。
ci{, di{, yi{:修改、剪切或复制{}之间的内容。
ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。
ci<, di<, yi<:修改、剪切或复制<>之间的内容。
ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。

2、页面移动
CTRL+d:向下翻半页
CTRL+u:向上翻半页
CTRL+b:向上翻一页
CTRL+f:向下翻一页
CTRL+e:向下滚动一行
CTRL+y:向上滚动一行
n%: 到文件n%的位置。
zz: 将当前行移动到屏幕中央。
zt: 将当前行移动到屏幕顶端。
zb: 将当前行移动到屏幕底端。

3、标记
使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 进行 后退 和 前进 。

m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
`{a-z}: 移动到标记位置。
'{a-z}: 移动到标记行的行首。
`{0-9}:回到上[2-10]次关闭vim时最后离开的位置。
``: 移动到上次编辑的位置。''也可以,不过``精确到列,而''精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。
`": 移动到上次离开的地方。
`.: 移动到最后改动的地方。
:marks 显示所有标记。
' 跳转前的光标位置
'' 最后编辑的光标位置
[ 最后修改的开始位置
] 最后修改的结束位置
:delmarks a b -- 删除标记a和b。
:delmarks a-c -- 删除标记a、b和c。
:delmarks a c-f -- 删除标记a、c、d、e、f。
:delmarks! -- 删除当前缓冲区的所有标记。
:help mark-motions 查看更多关于mark的知识
:jumps 命令能输出一个你可以跳往的位置的列表。最后一个你使用的标记会用 ">" 符号标记出来。

4、文本编辑
i: 在光标前插入;[n]i,输入完字符后,会重复输入n次输入的字符
I: 在当前行第一个非空字符前插入;
gI: 在当前行第一列插入;
a: 在光标后插入;
A: 在当前行最后插入;
o: 在下面新建一行插入;
O: 在上面新建一行插入;
:r filename在当前位置插入另一个文件的内容。
:[n]r filename在第n行插入另一个文件的内容。
:r !command可以将其它shell命令的输出插入当前文档。
:9,13w >>another:将9-13行追加到文件another后面
:3r /home/user/file:将/home/user/file文件的内容追到到当前文件第3行后
c[n]w: 改写光标后1(n)个词。
c[n]l: 改写光标后n个字母。
c[n]h: 改写光标前n个字母。
c[n]e: 改写光标后1(n)个词
c[n]b: 改写光标前n个词
c^:改写当前光标到行首第一个非空字符
c0:改写当前光标之前的字符
c$:改写当前光标到行尾的字符,等同于C
[n]cc: 修改当前[n]行。
[n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
[n]S: 删除指定数目的行,并以所输入文本代替之。
~: 反转光标所在字符的大小写。
可视模式下的U或u:把选中的文本变为大写或小写。
gu(U)接范围(如$,或G),可以把从光标当前位置到指定位置之间字母全部 转换成小写或大写。如ggguG,就是把开头到最后一行之间的字母全部变为小 写。再如gu5j,把当前行和下面四行全部变成小写。
r: 替换光标处的字符,同样支持汉字。
R: 进入替换模式,按esc回到正常模式。
[n] u: 取消一(n)个改动。
:undo 5 -- 撤销5个改变。
:undolist -- 你的撤销历史。
ctrl + r: 重做最后的改动。
U: 取消当前行中所有的改动。
:earlier 4m -- 回到4分钟前
:later 55s -- 前进55秒

:'<,'>normal  会在每一行都执行命令
:X -- 为当前文件设置密码。
:set key= -- 去除文件的密码。
ctrl+v选择块后,然后I进入编辑状态在第一行的开始输入#,然后两次esc退出后,刚才选中的所有行前面自动加#,从而达到注释所有行的目的。
shift+v可以用来选中多行,然后:s/aaa/bbb/g, 对选中的行中进行替换。

:set spell  打开拼写检查
:set spelllang=[language abbreviation] 设置使用的语言

针对英文文本文档,检查文档的拼写。波浪线将出现在拼写错误的单词下方。
要在拼写错误的单词之间来回跳转
]s    # Jump to next mistake
[s    # Jump to previous mistake
z= 将光标移到拼写错误的单词上方后,输入z=查看拼写建议,这将为您提供可能的匹配项列表。您可以通过选择关联的数字来选择所需的选项,或者可以按Enter键以保持单词原样不变。
如果想将单词标记为非拼写错误,可以将其添加到拼写列表之一。Vim维护两个拼写列表,一个常规列表;另一个是临时列表,将仅用于当前会话。

将光标放到该单词上,将其添加到“好”单词列表中
zg    # Adds word to regular dictionary
zG    # Adds word to the current session dictionary
将光标放到该单词上,删除“好”单词列表
zug   # Remove word from regular dictionary
zuG   # Remove word from the current session dictionary

5、文本操作
[n]x: 剪切光标右边n个字符,相当于d[n]l。
[n]X: 剪切光标左边n个字符,相当于d[n]h。
y: 复制在可视模式下选中的文本。
yy or Y: 复制整行文本。
y[n]w: 复制光标后(n)个词。
y[n]l: 复制光标右边1(n)个字符。
y[n]h: 复制光标左边1(n)个字符。
y[n]e: 复制光标后(n)个词。
y[n]b: 复制光标前n个词
y$: 从光标当前位置复制到行尾。
y0: 从光标当前位置复制到行首。
:m,ny<cr> 复制m行到n行的内容。
y1G或ygg: 复制光标以上的所有行。
yG: 复制光标以下的所有行。
yaw: 复制一个词,即使光标不在词首和句首也没关系。
yas:复制一个句子,即使光标不在词首和句首也没关系。
d: 删除(剪切)在可视模式下选中的文本。
d$ or D: 删除(剪切)当前位置到行尾的内容。
d[n]w: 删除(剪切)光标1(n)个单词,会删除单词后面的空格
d[n]l: 删除(剪切)光标右边1(n)个字符。
d[n]h: 删除(剪切)光标左边1(n)个字符。
d[n]e: 删除(剪切)光标后1(n)个单词,不会删除单词后面的空格
d[n]b: 删除(剪切)光标前1(n)个单词
d0: 删除(剪切)当前位置到行首的内容
[n] dd: 删除(剪切)1(n)行。
:m,nd<cr> 剪切m行到n行的内容。
d1G或dgg: 剪切光标以上的所有行。
dG: 剪切光标以下的所有行。
daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
d/f<cr>:这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
dt) 一直删除到这行的)
p: 在光标之后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴
P: 在光标之前粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的上一行粘贴
:1,10 co 20 将1-10行插入到第20行之后。
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
:1, 10 m 20 将第1-10行移动到第20行之后
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
:g/^\s*$/d  删除所有空白行(^是行的开始,\s*是零个或者多个空白字符;$是行尾)
ctrl+shift+v 将剪贴板中的内容粘贴进来
另:
aw:一个词
as:一句。
ap:一段。
ab:一块(包含在圆括号中的)。
y, d, c, v都可以跟文本对象。
w 看起来与 aw 效果差不多. 区别在于光标位置. 比如, 如果用 dw 来删除一个词, 光标必须在词的开头. 如果在除了开头的其他位置使用 dw, 只能删除部分单词. 但是, daw 允许光标在一个词的任何位置删除整个单词.

6、查找命令
/something: 在后面的文本中查找something。
?something: 在前面的文本中查找something。
/pattern/+number: 将光标停在包含pattern的行后面第number行上。
/pattern/-number: 将光标停在包含pattern的行前面第number行上。
:g/pattern/nu 所有包含pattern的行以及行号 g的意思是global,全文的意思,nu是number,行号的意思 你也可以把g换成3,6之类的,只在3-6行中搜索
/test\c 搜索时忽略大小写,在待搜索字符串后加个\c
假如进行过几次查找,想继续以之前查过的关键词查找时,只要按/ 然后上下键来选择即可;同理,按下: 然后上下键,也可以翻看执行过的历史纪录,不过仅限于当前的编辑。
n: 向后查找下一个。
N: 向前查找下一个。
*: 向下搜索光标所在词。
g*: 同上,但部分符合即可。
#: 向上搜索光标所在词。
g#: 同上,但部分符合即可。
:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找
:set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。
:set nohlsearch  关闭高亮搜索显示
:nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
.*[]^%/?~$ 特殊字符在查找时需要转义

如果你输入 "/the",你也可能找到 "there"。要找到以 "the" 结尾的单词,可以用:/the\>
"\>" 是一个特殊的记号,表示只匹配单词末尾。类似地,"\<" 只匹配单词的开头。这样,要匹配一个完整的单词 "the",只需:/\<the\> 这不会匹配 "there" 或者 "soothe"。 
注意 "*" 和 "#" 命令也使用了 "词首" 和"词尾" 标记来匹配整个单词 (要部分匹配,使用 "g*" 和 "g#")

星号项 "*" 规定在它前面的项可以重复任意次。因此:
/a*
匹配 "a","aa","aaa",等等。但也匹配 "" (空字串),因为零次也包含在内。
星号 "*" 仅仅应用于那个紧邻在它前面的项。因此 "ab*" 匹配 "a"、"ab"、"abb"、"abbb" 等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 "\(",后面加 "\)"。因此这个命令:
/\(ab\)*
匹配: "ab","abab","ababab",等等。而且也匹配 ""。
要避免匹配空字串,使用 "\+"。这表示前面一项可以被匹配一次或多次。
/ab\+
匹配 "ab"、"abb"、"abbb" 等等。它不匹配后面没有跟随 "b" 的 "a"。
要匹配一个可选项,用 "\="。 例如:
/folders\=
匹配 "folder" 和 "folders"。
指定重复次数
要匹配某一项的特定次数重复,使用 "\{n,m}" 这样的形式。其中 "n" 和 "m" 都是数字。在它前面的那个项将被重复 "n" 到 "m" 次 ( inclusive 包含 "n" 和 "m")。例
如 :
/ab\{3,5}
匹配 "abbb"、"abbbb" 以及 "abbbbb"。
当 "n" 省略时,被默认为零。当 "m" 省略时,被默认为无限大。当 ",m" 省略时,就表示重复正好 "n" 次。例如:
模式      匹配次数
\{,4}     0,1,2,3 或 4
\{3,}     3,4,5 等等
\{0,1}    0 或 1,同 \=
\{0,}     0 或更多,同 *
\{1,}     1 或更多,同 \+
\{3}      3
匹配尽可能少的字符
若要匹配尽可能少的字符,请用"\{-n,m}"。它的用法跟 "\{n,m}" 一样,唯一的区别在于,它采用尽可能少的字符。
例如,以下命令:
/ab\{-1,3}
将匹配 "abbb" 中的 "ab"。实际上,因为没理由匹配更多,所以它永远不会匹配超过一个 b。它需要其它的来强制它超过其下限规定次数,而匹配更多的重复。
这些同样的规则也适用于省略 "n" 和 "m" 的情形。甚至可以把两个都省略,只剩"\{-}"。这个项匹配其前项的重复,重复次数尽可能少,可以等于或大于零。这个项如单独使用,则总是匹配前项的零次重复。当它跟与其它的模式合起来时,用处就大了。例如:
/a.\{-}b
这个命令匹配 "axbxb" 中的 "axb"。如果采用了下面这个模式:
/a.*b
由于 ".*" 匹配尽可能多的字符,整个 "axbxb" 都会被匹配

在一个查找模式中,"或" 运算符是 "\|"。例如:/foo\|bar
/end\(if\|while\|for\)这个命令匹配 "endif"、"endwhile" 和 "endfor"。
你可以用 "/a\ b\ c" 来匹配 "a","b" 或 "c"。当你需要匹配自 "a" 至 "z" 所有的字母时,以这样的方式表达就嫌长了。这里有个比较简短的表达方式:/[a-z]
:vim[grep][!] /{pattern}/[g][j] {file} ...
如果命令前面带数字,它定义要寻找的最大匹配数目
[!] 放弃当前缓冲区的任何修改
如果没有 ’g’ 标志位,每行只加一次。如果有 ’g’,每个匹配都被加入。
如果没有 ’j’ 标志位,Vim 跳到第一个匹配上。如果有 ’j’,只更新 quickfix 列表。
比如电子书中每一节的标题形式为:n. xxxx。你就可以这样:vim/^\d\{1,}./ % (%代表当前文件名)然后用:cw或:copen查看结果

lvimgrep 与 vimgrep 搜索命令基本一样,不同点在于搜索结果不是显示在 Quickfix 中而是显示在 location-list 中

具体使用参考API

7、替换
r:将当前字符替换成输入字符
R:进入替换模式,按esc退出
:s/old/new - 用new替换当前行第一个old。
:s/old/new/g - 用new替换当前行所有的old。
:n,$s/old/new/ 替换第 n 行开始到最后一行中每一行的第一个 old 为 new
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
:%s/old/new/g - 用new替换文件中所有的old。
:%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
:%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。
"p" (print,打印),用于在命令执行的时候打印出最后一个被修改的行。
"c" (confirm,确认) 标记会在每次替换前向你询问是否需要替换
:%s/\s\+$//  删除这些每行后面多余的空格  \s\+$”。这表示行末($)前的一个或者多个(\+)空格(\s)
:%s/old/new/(等同于 :g/old/s//new/) 替换每一行的第一个 old 为 new
:%s/old/new/g(等同于 :g/old/s//new/g) 替换每一行中所有 old 为 new
命令中的/可以用其他字符替换 如:%s,^,//,g 意思为在所有行首添加//
sed -i 's/old/new/g' * 将目录中所有文件中所有old字符串替换成new字符串
:g/pattern/cmd  这个g命令式在文中查找pattern,然后对找到的这些行执行cmd命令
:v (或 :g!)与 :g 相反,是在不匹配的行上执行命令。
:g!/^hello/s/old$/new/g 在不是以hello开头的行里,如果其行末以old结尾,则将其替换为new
:g/^[^#]/s/^/#/ 把开头不是#的行的开头添加上为#,不包含空行
:g!/^#/s/^/#/ 把开头不是#的行的开头添加上为#,包含空行

\n只能被替换或删除 \r只能用来插入或替换
%s/$/\r/g 文件末尾添加换行
%s/\n//g  去掉换行
"\n"代表换行符,"\r"代表回车符
%s .... /g 这样的搜索替换格式只能保证你在一行中被多次替换,但是一旦你插入了一个行结束符(\n),这个行会中止,当前行不再继续进行替换,因此你显然不能替换为 \n 这样的字符,这样会造成当前行不继续产生后续替换。
\n 可以作为搜索 pattern,但被替换的内容中不能包含\n,只能用\r来替换

8、格式化
<< 向左缩进一个shiftwidth
如果先按了n,再按两下>;,光标以下的n行会缩进。
>> 向右缩进一个shiftwidth
:ce(nter) 本行文字居中
:le(ft) 本行文字靠左
:ri(ght) 本行文字靠右
gq 对选中的文字重排,即对过长的文字进行断行
gqq 重排当前行
gqnq 重排n行
gqap 重排当前段
gqnap 重排n段
gqnj 重排当前行和下面n行
gqQ 重排当前段对文章末尾
gg=G 整个文件重置缩进
2G=15G 第二行至第15行重置缩进
J 拼接当前行和下一行
gJ 同 J ,不过合并后不留空格。
== 自动格式化 或者n==,调整n行代码的缩排。
可视模式 = 格式化
:join命令,将几行合并为一行并使用空格来分隔各行。
:join! 将几行合并为一行,中间不包含空格

:set spell-开启拼写检查功能
:set nospell-关闭拼写检查功能
]s-移到下一个拼写错误的单词
[s-移到上一个拼写错误的单词
z=-显示一个有关拼写错误单词的列表,可从中选择
zg-告诉拼写检查器该单词是拼写正确的
zw-告诉拼写检查器该单词是拼写错误的

9、自动补全
C-x C-s -- 拼写建议。
C-x C-v -- 补全vim选项和命令。
C-x C-l -- 整行补全。
C-x C-f -- 自动补全文件路径。弹出菜单后,按C-f循环选择,当然也可以按 C-n和C-p。
C-x C-p 和C-x C-n -- 用文档中出现过的单词补全当前的词。 直接按C-p和C-n也可以。
C-x C-o -- 编程时可以补全关键字和函数名啊。
C-x C-i -- 根据头文件内关键字补全。
C-x C-d -- 补全宏定义。
C-x C-n -- 按缓冲区中出现过的关键字补全。 直接按C-n或C-p即可。
当弹出补全菜单后:

C-p 向前切换成员;
C-n 向后切换成员;
C-e 退出下拉菜单,并退回到原来录入的文字;
C-y 退出下拉菜单,并接受当前选项。

10、折叠
zf -- 创建折叠的命令,可以在一个可视区域上使用该命令;
zd -- 删除当前行的折叠;
zD -- 删除当前行的折叠;
zfap -- 折叠光标所在的段;
zo -- 打开折叠的文本;
zO -- 打开光标下面的所有折叠
zc -- 收起折叠;
zC -- 关闭光标下面的所有折叠
za -- 打开/关闭当前折叠;
zr -- 打开嵌套的折行;
zm -- 收起嵌套的折行;
zR (zO) -- 打开所有折行;
zM (zC) -- 收起所有折行;
zj -- 跳到下一个折叠处;
zk -- 跳到上一个折叠处;
zi -- enable/disable fold;

11、命令行模式快捷键
上下方向键:上一条或者下一条命令。如果已经输入了部分命令,则找上一 条或者下一条匹配的命令。
左右方向键:左/右移一个字符。
C-w: 向前删除一个单词。
C-h: 向前删除一个字符,等同于Backspace。
C-u: 从当前位置移动到命令行开头。
C-b: 移动到命令行开头。
C-e: 移动到命令行末尾。
Shift-Left: 左移一个单词。
Shift-Right: 右移一个单词。
@: 重复上一次的冒号命令。
q: 正常模式下,q然后按':',打开命令行历史缓冲区, 可以像编辑文件一样编辑命令。
q/和q? 可以打开查找历史记录。

12、执行外部命令
:! cmd 执行外部命令。
:!! 执行上一次的外部命令。
:@: 重复上一次的冒号命令
![motion] filter 要对从当前位置到文件末尾的行进行排序,可以键入:!G sort
:sh 调用shell,用exit或ctrl+d返回vim。
:[n]r !cmd 将命令的返回结果插入文件当前位置或第n行。
:m,n !cmd 将文件的m行到n行之间的内容作为shell 命令的输入。输出的结果会替换掉你输入的文字。例如:2,5!sort 会把第二列到第五列的文字依序排列,而原来的文字就会被覆盖。
!!command 执行command命令并将执行结果输出到当前行(覆盖方式)
!}command 执行command命令并将执行结果输出到当前行和之后的行中(覆盖方式)
:[range]w[rite] !{cmd},执行命令 {cmd},以 [range] 限定的行作为标准输入
:w !sudo tee %  保存文件而不需要必要的权限   %,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。tee是一个把stdin保存到文件的小工具

13、映射
 递归  非递归        模式                          
:map    :noremap    normal, visual, operator-pending
:nmap    :nnoremap    normal
:xmap    :xnoremap    visual
:cmap    :cnoremap    command-line
:omap    :onoremap    operator-pending
:imap    :inoremap    insert

例如:
:nmap abc :echo "test"<cr>
:nunmap abc 可以取消这个映射。
:nmap 是递归执行的!右边执行可能是映射,如下
:nmap e :echo "test"<cr>
:nmap f e
如果你敲击f,我们期望着光标跳到词尾,但是实际情况是“test”被输出到命令行里!因为在右边,e 已经被映射到别的行为上了,换句话说就是 :echo "test"<cr>。
解决此问题的正确方法是使用一种 非递归 的映射代替:
:nnoremap f e
除非递归是必须的,否则建议使用非递归映射。

:nmap 显示所以普通模式下的映射,
:nmap <leader> 显示所有以 <leader> 键开头的普通模式下的映射。
如果你想禁止用标准映射,把他们映射到特殊字符 <nop> 上,例如::noremap <left> <nop>。

Vim预置有很多快捷键,再加上各类插件的快捷键,大量快捷键出现在单层空间中难免引起冲突。为缓解该问题,而引入了前缀键<leader>。藉由前缀键, 则可以衍生出更多的快捷键命名空间(namespace)。例如将r键配置为<leader>r、<leader><leader>r等多个快捷键。
映射前置键(Leader 键)本身就是一个按键映射,默认为 \。我们可以通过在 map 中调用 <leader> 来为把它添加到其他按键映射中。
nnoremap <leader>h :help grep<cr>
这样,我们只需要先按 \ 然后连续按 h 就可以激活这个映射 :help grep<cr>。如果你想通过先按 空格 键来触发,只需要这样做:
let g:mapleader = ' '
nnoremap <leader>h :help grep<cr>
此处建议使用 g:mapleader,因为在 Vim 脚本中,函数外的变量缺省的作用域是全局变量,但是在函数内缺省作用域是局部变量,而设置快捷键前缀需要修改全局变量 g:mapleader 的值。
另外,还有一个叫 <localleader> 的,可以把它理解为局部环境中的 <leader>,默认值依然为 \。当我们需要只对某一个条件下(比如,特定文件类型的插件)的缓冲区设置特别的 <leader> 键,那么我们就可以通过修改当前环境下的 <localleader> 来实现。
注意:如果你打算设置 Leader 键,请确保在设置按键映射之前,先设置好 Leader 键。如果你先设置了含有 Leader 键的映射,然后又修改了 Leader 键,那么之前映射内的 Leader 键是不会因此而改变的。你可以通过执行 :nmap <leader> 来查看普通模式中已绑定给 Leader 键的所有映射。

缩写:
缩写在插入,替换和命令行模式中使用。如果你输入一个是缩写的单词,它会被替换成所表示的东西。这可以在经常输入的长单词时节省键击。并且能用它来自动更正经常犯的拼写错误
有三种类型的缩写:
full-id "full-id" 类型完全由关键字字符组成 (字母和 ’iskeyword’ 选项的字符)。这是最普通的缩写。
例如: "foo","g3","-1"
end-id "end-id" 类型以一个关键字字符结尾,但所有其它字符都不是关键字字符。
例如: "#i","..f","$/7"
non-id "non-id" 类型以一个非关键字字符结尾,其它字符可以是任意类型,除了空格和制表。{Vi 不支持这种类型}
例如: "def#","4/7$"
不能被缩写的字串例子: "a.b","#def","a b","_$r"
仅当你输入一个非关键字字符时缩写才会被识别,这也包括用 <Esc> 退出插入模式或用<CR> 结束一个命令的情形。结束缩写的非关键字字符被插入到缩写的扩展后面。一个例外是字符 <C-]>,它用来扩展一个缩写,但不插入任何附加字符。
:ab hh hello  "hh<Space>" 被扩展为 "hello<Space>","hh<C-]>" 被扩展为 "hello"

光标前的字符必需和缩写匹配。每种类型还有附加规则:
full-id 匹配的前面是一个非关键字字符,或者是在行或插入的开始。例外: 当缩写仅有一个字符时,如果它前面有一个非关键字字符则不会被识别,除非那是空格和制表。不过,命令行上忽略 "’<,’>" (或其它标记) 部分,就像命令行从那之后开始那样。
end-id 匹配的前面是一个关键字字符,或者空格或制表,或者行或插入的开始。
non-id 匹配的前面是一个空格、制表或者行或插入的开始。
例如: ({CURSOR} 是你输入一个非关键字字符的地方)
:ab foo four old otters
" foo{CURSOR}" 被扩展为 " four old otters"
" foobar{CURSOR}" 不被扩展
"barfoo{CURSOR}" 不被扩展
:ab #i #include
"#i{CURSOR}" 被扩展为 "#include"
">#i{CURSOR}" 不被扩展
:ab ;; <endofline>
"test;;" 不被扩展
"test ;;" 被扩展为 "test <endofline>"

要在插入模式中避免缩写: 在会启动缩写的的字符之前面输入 CTRL-V,例如 CTRL-V<Space>。或者先输入缩写的部分,以 <Esc> 退出插入模式,再用 ’a’ 重新进入插入模式并输入剩下的部分。
要在命令行模式中避免缩写: 在缩写的某处输入 CTRL-V 两次来避免它被替换。不然,一个普通字符前面的 CTRL-V 通常会被忽略。
缩写进行之后移动光标是可能的:
:iab if if ()<Left>
如果 ’cpoptions’ 里面包含 ’<’ 标志位时,这不能正常工作。 
你甚至可以做更复杂的事情。
例如,要消灭一个缩写后面输入的空格:
func Eatchar(pat)
    let c = nr2char(getchar(0))
    return (c =~ a:pat) ? ’’ : c
endfunc
iabbr <silent> if if ()<Left><C-R>=Eatchar(’\s’)<CR>
没有缺省的缩写。

缩写永远不会递归。你可以设置 ":ab f f-o-o" 而不会有任何问题。但是缩写能被映射。{一些版本的 Vi 支持递归缩写,这毫无道理}
’paste’ 选项打开时,缩写被禁止。

:abbreviate-local :abbreviate-<buffer> 和映射一样,缩写可以被局部于一个缓冲区之内。这经常用于 filetype-plugin 文件。一个 C 插件文件的例子:
:abb <buffer> FF for (i = 0; i < ; ++i)
:ab :abbreviate 列出所有的缩写。第一栏中的字符表示该缩写作用的模式:
’i’ 指插入模式,’c’ 指命令行模式,’!’ 指两种模式都有。这和映射的相同,参看 map-listing 。
:abbreviate-verbose 如果 ’verbose’ 非零,缩写列出的同时显示它最近定义的位置。例如:
:verbose abbreviate
! teh the
Last set from /home/abcd/vim/abbr.vim
:verbose-cmd 说明详情。
:ab[breviate] {lhs} 列出以 {lhs} 开头的缩写
:ab[breviate] [<expr>] [<buffer>] {lhs} {rhs}
增加一个从 {lhs} 到 {rhs} 的缩写。如果 {lhs} 已经存在则它会被替换成新的 {rhs}。{rhs} 可包含空格。
:map-<expr> 说明可选的 <expr> 参数。
:map-<buffer> 说明可选的 <buffer> 参数。
:una[bbreviate] [<buffer>] {lhs}
从列表中删除 {lhs} 的缩写。如果找不到,删除 {rhs} 匹配这里的 {lhs} 参数的缩写。这是为了方便你删除扩展后的缩写。要避免扩展,插入 CTRL-V (记住输入两次)。
:norea[bbrev] [<expr>] [<buffer>] [lhs] [rhs] 与 ":ab" 一样,但 {rhs} 不进行重映射。
:ca[bbrev] [<expr>] [<buffer>] [lhs] [rhs] 与 ":ab" 一样,但仅在命令行模式中使用。
:cuna[bbrev] {lhs} 与 ":una" 一样,但仅在命令行模式中使用。
:cnorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs] 与 ":ab" 一样,但仅在命令行模式中使用并且 {rhs} 不进行重映射。
:ia[bbrev] [<expr>] [<buffer>] [lhs] [rhs] 与 ":ab" 一样,但仅在插入模式中使用。
:iuna[bbrev] {lhs} 与 ":una" 一样,但仅在插入模式中使用。
:inorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs] 与 ":ab" 一样,但仅在插入模式中使用并且 {rhs} 不进行重映射。
:abc[lear] [<buffer>] 删除所有的缩写。
:iabc[lear] [<buffer>] 为插入模式删除所有的缩写。
:cabc[lear] [<buffer>] 为命令行模式删除所有的缩写。

在一个缩写的 {rhs} 中使用特殊字符是可能的。CTRL-V 可以用来避免多数不可显示字符的特殊含义。需要输入多少个 CTRL-V 取决于你如何输入缩写。此处讨论同样适用于映射。这里使用一个例子说明。
假设你需要把 "esc" 缩写为输入一个 <Esc> 字符。当你在 Vim 中输入 ":ab" 命令,你必需这样输入: (这里 ^V 是一个 CTRL-V 并且 ^[ is <Esc>)
你输入: ab esc ^V^V^V^V^V^[
所有的键盘输入都经过 ^V 引用解释,所以第一个,第三个,和第五个 ^V 字符只是为了把第二个、第四个 ^V 和 ^[ 输入到命令行里。
你看到: ab esc ^V^V^[
命令行里在 ^[ 之前包含两个实际的 ^V。如果你采用这种方法,这是该行在你的 .exrc 文件应该出现的样子。第一个 ^V 作为引用第二个 ^V 的字符: 这是因为 :ab 命令使用 ^V 作为它自己的引用字符,以便你能在缩写中包含被引用的空白字符或 | 字符。:ab 命令对 ^[ 字符并不做特殊的事情,所以它不需要被引用。(尽管引用也没有害处;因而输入 7 个 [8 个不行!] ^V 也会工作。)
被保存为: esc ^V^[
解析后,该缩写的简短形式 ("esc") 和扩展形式 (两字符 "^V^[") 被保存在缩写表中。如果输入不带参数的 :ab 命令,这是该缩写被显示的形式。然后当用户输入单词 "esc" 而扩展该缩写时,扩展形式服从和一般键盘输入同样形式的 ^V 解释。所以 ^V 保护 ^[ 字符不被解释为 "退出插入模式" 的字符,而把 ^[ 插入到文本里。
扩展为: ^[
[Steve Kirkendall 提供示例]

14、插入特殊字符
您可能需要不时做的另一件事是插入传统qwerty键盘上没有的字符。我们称这些为“特殊字符”。您可以通过输入以下内容来查看vim的特殊字符集:
:digraphs
NU ^@  10    SH ^A   1    SX ^B   2    EX ^C   3    ET ^D   4    EQ ^E   5
AK ^F   6    BL ^G   7    BS ^H   8    HT ^I   9    LF ^@  10    VT ^K  11
FF ^L  12    CR ^M  13    SO ^N  14    SI ^O  15    DL ^P  16    D1 ^Q  17
D2 ^R  18    D3 ^S  19    D4 ^T  20    NK ^U  21    SY ^V  22    EB ^W  23
CN ^X  24    EM ^Y  25    SB ^Z  26    EC ^[  27    FS ^\  28    GS ^]  29
RS ^^  30    US ^_  31    SP     32    Nb #   35    DO $   36    At @   64

现在,您可以通过在左列中键入CTRL-k两个字母,然后在右列中插入任何字符。
例如,在我的计算机上,要输入英镑符号,可以在插入模式下输入以下字符:
CTRL-k Pd

15、其他常用命令
:pwd 显示vim的工作目录。
:cd path 改变vim的工作目录。
:set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

K: 打开光标所在词的manpage。
g Ctrl+g: 统计全文或统计部分的字数。
在插入模式下,输入Ctrl+r =,然后输入表达式,就能在 光标处得到计算结果,相当于计算器
:h(elp)或F1 打开总的帮助。
:help user-manual 打开用户手册。
:helptags somepath 为somepath中的文档生成索引。
:helpgrep 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。
:help xxx 显示xxx的帮助
:help 'number' Vim选项的帮助用单引号括起
:help <Esc> 特殊键的帮助用<>扩起
:help -t Vim启动参数的帮助用-
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
:syntax 列出已经定义的语法项
:syntax clear 清除已定义的语法规则
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案
Ctrl+t 标签退栈 
nCtrl+t 返回跳转 n 次
Ctrl+o 跳转到前一个位置,跳转到上一视图,可用于搜索后、使用gg|G跳转或tag跳转的返回
Ctrl+i 跳转到下一个位置
Ctrl-S 停止显示终端的输出,也不会响应你的输入(但输入是生效的) 这个功能可以用于长时间编译的时候随时把屏幕输出停住,但是编译仍然会继续,这样就不会影响到编译时间了
Ctrl-Q 即可恢复输入
[+ctrl+i 向上寻找函数、变量和#define
]+ctrl+i 向下寻找函数、变量和#define
[+ctrl+d 跳转到#define处
. 重复前一次命令
n.重复前一个操作n次
:set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
:scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
:ver 显示版本信息。
在Unix系统上vimtutor打开帮助文档
在Windows系统上:help tutor打开帮助文档
:filetype 显示当前文件类型相关的设置
在normal模式下光标停在某个字符上ga可以查看该字符的ascii码

可视模式下
i( - 选小括号中内容,不包括小括号
a( - 选小括号中内容,包括小括号
i[ - 选中括号中内容,不包括括号
a[ - 选中括号中内容,包括括号
i{ - 选大括号中内容,不包括大括号
a{ - 选大括号中内容,包括大括号
i< - 选尖括号中内容,不包括大括号
a< - 选尖括号中内容,包括大括号
i" - 选中""中间内容
i' - 选中"中间的内容
is - 选中一个句子
iw - 选中一个单词
ip - 选中一个段落
ab - 选中一个块,"(" 到其相应的 ’)’,包括 ’(’ 和 ’)’ 。它并不包括括号之外的空白。
ib - 选中一个块,"(" 到其相应的 ’)’,不包括 ’(’ 和 ’)’ 。

下面三个前缀用来访问特殊的数值
“$”——访问环境变量;
“&”——访问 Vim 选项;
“@”——访问寄存器。
例如
:echo $VIM
/usr/share/vim
:echo &sessionoptions
blank,buffers,folds,help,options,tabpages,winsize,sesdir

:g/^$/d 删除不包含任何空格的空行;
:g/^\s*$/d 删除包含空格的空行;
:%s/\(\s*\n\)\+/\r/  删除包含空格的空行,最后会多出一个空白行
:%s/\s\+$//g 删除行尾空格:

ctrl+a  该组合键可以将数字加一
:%norm jdd或:g/^/+1 d  删除偶数行
%norm jkdd或:g/^/d|m.  删除奇数行
:%s/.*/&/r&/或:g/^/t.  double所有行
:g/^/m 0   倒序文件行(即unix下的tac命令)

ctrl+u 输入模式删除光标到开头的输入
Ctrl+W 输入模式删除最近输入的单词
Ctrl+H 输入模式删除光标之前的一个字符

Ctrl+o:插入模式输入,暂时进入normal模式。一次命令后,回到插入模式

vim学习笔记-常用命令相关推荐

  1. React Native开发学习笔记——常用命令

    学习RN开发的过程中,有许多需要命令操作的功能,对涉及到的命令进行总结. 搭建环境阶段    首先需要使用命令行下载安装 Chocolatey.python 2 .node.js.Yarn.详情:Re ...

  2. shell 学习笔记 常用命令 tar cpio gzip zip

    摘自 Linux Shell 脚本攻略 第七章 B计划 使用 tar 归档 tar命令可以归档文件.它最初是设计用来将数据存储在磁带上,因此其名字也来源于Tape ARchive.tar可以将多个文件 ...

  3. Kubernetes学习笔记---常用命令

    1 查看类命令 --- # 查看集群信息 kubectl cluster-info # 查看各组件信息 kubectl -s http://localhost:8080 get componentst ...

  4. Kafka学习笔记-常用命令

    特性 高吞吐量.低延迟,kakka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个主题可以分为多个分区,消费组可以对分区进行消费操作. 可扩展性:kafka集群支持热扩展 扩展性:可靠性,消费被 ...

  5. Git 学习笔记 —— 常用命令

    2019独角兽企业重金招聘Python工程师标准>>> =============================================================== ...

  6. VIM学习笔记 配置文件(vimrc)

    为什么80%的码农都做不了架构师?>>>    VIM学习笔记 配置文件(vimrc) 在vim启动过程中,首先将查找配置文件并执行其中的命令.而这些初始化文件一般有vimrc.gv ...

  7. 【Linux】Linux入门学习之常用命令一

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  8. 【Linux】Linux入门学习之常用命令四

    介绍 这里是小编成长之路的历程,也是小编的学习之路.希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡. 一个人为什么要努力? ...

  9. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

最新文章

  1. UIImageView动画
  2. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现
  3. mysql 倒序 分页_nodeJS与MySQL实现分页数据以及倒序数据
  4. Vue — 第三天(计算属性和json-server)
  5. github打开前端样式丢失_工具资源系列之 github 上各式各样的小徽章从何而来?...
  6. 手机软件项目管理—项目组内部的沟通
  7. 那位全心投入本地生活的首席科学家!
  8. 1.看板方法---解决敏捷管理者的困境
  9. 瑞斯康达nms_瑞斯康达接入网设备维护标准手册.docx
  10. html 生成条形码,在Javascript中优雅的生成条形码——Jsbarcode
  11. 关于固态硬盘开卡转接卡的研究,用SM2258XT测试智微、祥硕、威盛
  12. 我市首个湿地公园大连湾前关湿地公园今秋纳客
  13. 网络媒体教程:人物素描
  14. 微信新功能曝光:定时发送消息
  15. android sdk离线安装方法,Android 4.0 SDK的离线方式安装
  16. 广东诚美计算机专修学院 概况,广州各大高校
  17. 筑梦品牌:推动品牌建设致力于打造好中国品牌
  18. Arduinomega2560与LCD12864
  19. 都23年了你还记得渐进式框架是什么意思吗
  20. 【读书笔记】期权交易策略(1)

热门文章

  1. C++ 的 Copy Elision
  2. 爬虫实例:唐诗宋词爬虫
  3. 《谋圣鬼谷子》曝片花 徐麒雯饰演“姮娥”
  4. linux具有写保护权限的文件,细说Linux权限
  5. TextView Recyclerview省略号相关
  6. vue在组件内实现对图标的显示与隐藏
  7. Parallel HDF5 简介
  8. docker常用命令及镜像的制作与上传
  9. 共享单车涉足区块链前景待考
  10. 大数据实际案例系列一