Vim Reference

Posted greatlong

tags:

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

VIM cheat sheets

启动

vim -r file: 恢复上次异常退出的文件;
vim -R file: 以只读的方式打开文件,但可以强制保存;
vim -M file: 以只读的方式打开文件,不可以强制保存;
vim + file: 从文件的末尾开始;
vim +num file: 从第num行开始;


移动

H: 把光标移到屏幕最顶端一行。
M: 把光标移到屏幕中间一行。
L: 把光标移到屏幕最底端一行。
0: 移动到行首。
$: 移动到行尾。

+Enter: 把光标移至下一行第一个非空白字符。
-: 把光标移至上一行第一个非空白字符。
w: 前移一个单词,光标停在下一个单词开头;
W: 移动下一个单词开头,但忽略一些标点;
e: 前移一个单词,光标停在下一个单词末尾;
E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
b: 后移一个单词,光标停在上一个单词开头;
B: 移动到上一个单词开头,忽略一些标点;

h退格: 左移一个字符;
l空格: 右移一个字符;
j: 下移一行;
k: 上移一行;

文档操作

:e file --关闭当前编辑的文件,并开启新的文件。
:e! file --放弃对当前文件的修改,编辑新的文件。
:e+file -- 开始新的文件,并从文件尾开始编辑。
:e+n file -- 开始新的文件,并从第n行开始编辑。
:enew --编译一个未命名的新文档。(CTRL-W n)
:e -- 重新加载当前文档。
:e! -- 重新加载当前文档,并丢弃已做的改动。
:w -- 保存修改。
:wq -- 保存并退出。
ZZ -- 保存并退出。
:x -- 保存并退出。
:q[uit] ——退出当前窗口。(CTRL-W qCTRL-W CTRL-Q)


翻页

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

插入

i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8=。 这在插入分割线时非常有用,如30i+<esc>就插入了36+组成的分割线。
I: 在当前行第一个非空字符前插入;
gI: 在当前行第一列插入;
a: 在光标后插入;
A: 在当前行最后插入;
o: 在下面新建一行插入;
O: 在上面新建一行插入;
:r filename在当前位置插入另一个文件的内容。
:[n]r filename在第n行插入另一个文件的内容。
:r !date 在光标处插入当前日期与时间。同理,
:r !command可以将其它shell命令的输出插入当前文档。

复制/粘贴/剪切

p: 在光标之后粘贴。
P: 在光标之前粘贴。
d$ or D: 删除(剪切)当前位置到行尾的内容。
d[n]w: 删除(剪切)1(n)个单词
d0: 删除(剪切)当前位置到行首的内容
[n] dd: 删除(剪切)1(n)行。

剪切

首先,在normal模式下按v进入visual模式,使用方向键hjkl可以选择文字,再按下d就可以进行剪切。
其他normal模式下剪切命令:
dd:剪切当前行
nddn表示大于1的数字,剪切n
dw:从光标处剪切至一个单子/单词的末尾,包括空格
de:从光标处剪切至一个单子/单词的末尾,不包括空格
d$:从当前光标剪切到行末
d0:从当前光标位置(不包括光标位置)剪切之行首
d3l:从光标位置(包括光标位置)向右剪切3个字符
d5G:将当前行(包括当前行)至第5行(不包括它)剪切
d3B:从当前光标位置(不包括光标位置)反向剪切3个单词
dH:剪切从当前行至所显示屏幕顶行的全部行
dM:剪切从当前行至命令M所指定行的全部行
dL:剪切从当前行至所显示屏幕底的全部行

复制

首先,在normal模式下按v进入自由选取模式,使用方向键hjkl可以文选中文字,选择需要复制的文字后,按下y就可以进行复制了。
其他normal模式下复制命令:
yy:复制当前行
nyyn表示大于1的数字,复制n
yw:从光标处复制至一个单子/单词的末尾,包括空格
ye:从光标处复制至一个单子/单词的末尾,不包括空格
y$:从当前光标复制到行末
y0:从当前光标位置(不包括光标位置)复制之行首
y3l:从光标位置(包括光标位置)向右复制3个字符
y5G:将当前行(包括当前行)至第5行(不包括它)复制
y3B:从当前光标位置(不包括光标位置)反向复制3个单词

  1. vim 有 12 个粘贴板,分别是 0、1、2、...、9、a、“、+;用 :reg 命令可以查看各个粘贴板里的内容。在 vim 中简单用 y 命令只是复制到 "(双引号)粘贴板里,同样用 p 命令粘贴的也是这个粘贴板里的内容;
  2. 要将 vim 的内容复制到某个粘贴板,需要先退出编辑模式,再进入命令模式后,选择要复制的内容,然后按 "Ny(注意带引号)完成复制,其中 N 为粘贴板号(注意是按下 双引号 + 粘贴板号 + y),例如要把内容复制到粘贴板 a,选中内容后按 "ay 就可以了,有 两点需要说明一下:
    • " 号粘贴板(临时粘贴板)比较特殊,直接按 y 就复制到这个粘贴板中了,直接按 p 就粘贴这个粘贴板中的内容;
    • + 号粘贴板是系统粘贴板,用 "+y 将内容复制到该粘贴板后可以使用 ctrl+v 将其粘贴到其他文档(如 firefox、gedit)中,同理,要把在其他地方用 ctrl+c或右键复制的内容复制到 vim 中,需要在正常模式下按 "+p
  3. 要将 vim 某个粘贴板里的内容粘贴进来,需要先退出编辑模式,再在命令模式按 "Np,其中 N 为粘贴板号,如上所述,命令 "5p 会将 5 号粘贴板里的内容粘贴进来,也可以按 "+p 将系统全局粘贴板里的内容粘贴进来。
    参考 vim常用复制粘贴命令 这篇文章对vim的复制粘贴有详细深入的讨论

查找/替换

/something: 在后面的文本中查找something。
?something: 在前面的文本中查找something。
/pattern/+number: 将光标停在包含pattern的行后面第number行上。
/pattern/-number: 将光标停在包含pattern的行前面第number行上。
n: 向后查找下一个。
N: 向前查找下一个。

:s/old/new : 用new替换当前行第一个old。
:s/old/new/g : 用new替换当前行所有的old。

d: 表示十进制数
s: 表示空格
S: 非空字符
a: 英文字母
|: 表示 或
.: 表示.
{m,n}: 表示m到n个字符。这要和sa等连用,如a{m,n} 表示mn个英文字母。
{m,}: 表示m到无限多个字符。
**: 当前目录下的所有子目录。


排版

<< : 向左缩进一个shiftwidth
>>: 向右缩进一个shiftwidth
:ce(nter): 本行文字居中
:le(ft) :本行文字靠左
:ri(ght): 本行文字靠右


编辑多个文件

:next(:n):编辑下一个文件。
:previous:N:编辑上一个文件。
:wnext:保存当前文件,并编辑下一个文件。
:wprevious:保存当前文件,并编辑上一个文件。
:args: 显示文件列表。
vi -o filenames: 在水平分割的多个窗口中编辑多个文件。
vi -O filenames: 在垂直分割的多个窗口中编辑多个文件。


切换窗口

ctrl+w : 切换到下一个窗口。或者是ctrl+w w。
ctrl+w p: 切换到前一个窗口。


快速编辑/撤销/反撤销

~: 反转光标所在字符的大小写。
r: 替换光标处的字符,同样支持汉字。
R: 进入替换模式,按esc回到正常模式。

[n] u: 取消一(n)个改动。
:undo 5: 撤销5个改变。
:undolist: 你的撤销历史。
ctrl + r: 重做最后的改动。
U: 取消当前行中所有的改动。
:earlier 4m: 回到4分钟前
:later 55s :前进55秒

查看文件编码

:set fenc:set fileencoding:查看当前文件的编码。
:set ff:显示当前文件的格式。
:pwd: 显示vim的工作目录。
:ver: 显示版本信息。

在线帮助

:h(elp):或F1 打开总的帮助。
:help user-manual: 打开用户手册。命令帮助的格式为:第一行指明怎么使用那个命令; 然后是缩进的一段解释这个命令的作用,然后是进一步的信息。
:helptags somepath: 为somepath中的文档生成索引。
:helpgrep: 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。
Ctrl+]: 跳转到tag主题,
Ctrl+t 跳回。

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

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

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

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

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

vim代码片段插件ultisnips的使用

Vim Reference