更详细的可参考:https://blog.csdn.net/weixin_37657720/article/details/80645991
vim 几种模式:
命令模式:用vim打开文件就进入了命令模式;在输入模式下按键esc,则退出输入模式进入命令模式
输入模式:在命令模式输入i/I/a/A/o/O就进入输入模式;
可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
底线模式:在命令模式按下英文冒号:就进入了底线模式;
vim命令
-
开启vim
vim -r file
: 恢复上次异常退出的文件;vim -R file
: 以只读的方式打开文件,但可以强制保存;vim -M file
: 以只读的方式打开文件,不可以强制保存;
-
文件编辑
:e
: 重新加载当前文档;:e!
:重新加载当前文档,并丢弃已做的改动;:f或ctrl+g
: 显示文档名,是否修改,和光标位置。:f filename
: 改变编辑的文件名,这时再保存相当于另存为;- :saveas newfilename – 另存为
gf
:打开以光标所在字符串为文件名的文件,文件存在直接切换,没有则提示"E447: Can’t find file “xxxx” in path";:w
:保存修改。:wq
:保存并退出;ZZ
: 保存并退出;:x
: 保存并退出;:q[uit]
:退出当前窗口;(CTRL-W q或CTRL-W CTRL-Q)
-
光标移动
以下移动都是在命令模式下操作h或退格
: 左移一个字符;l或空格
: 右移一个字符;j
: 下移一行;k
: 上移一行;gj
: 移动到一段内的下一行;gk
: 移动到一段内的上一行;+或Enter
: 把光标移至下一行第一个非空白字符。-
: 把光标移至上一行第一个非空白字符。w
: 前移一个单词,光标停在下一个单词开头;W
: 移动下一个单词开头,但忽略一些标点;e
: 前移一个单词,光标停在下一个单词末尾;E
: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;b
: 后移一个单词,光标停在上一个单词开头;B
: 移动到上一个单词开头,忽略一些标点;ge
: 后移一个单词,光标停在上一个单词末尾;gE
: 同 ge ,不过‘单词’包含单词相邻的标点。(
: 前移1句。)
: 后移1句。{
: 前移1段;}
: 后移1段。fc
: 把光标移到同一行的下一个c字符处Fc
: 把光标移到同一行的上一个c字符处tc
: 把光标移到同一行的下一个c字符前Tc
: 把光标移到同一行的上一个c字符后;
: 配合f & t使用,重复一次,
: 配合f & t使用,反向重复一次
上面的操作都可以配合n使用,比如在正常模式(下面会讲到)下输入3h, 则光标向左移动3个字符。
0
: 移动到行首。g0
: 移到光标所在屏幕行行首。^
: 移动到本行第一个非空白字符。g^
: 同 ^ ,但是移动到当前屏幕行第一个非空字符处。:
: 移动光标所在屏幕行行尾。nG
: 到文件第n行。:n
:移动到第n行。:$
:移动到最后一行。H
: 把光标移到屏幕最顶端一行。M
: 把光标移到屏幕中间一行。L
: 把光标移到屏幕最底端一行。gg
: 到文件头部。G
: 到文件尾部。
-
翻屏
ctrl+f
: 下翻一屏。ctrl+b
: 上翻一屏。ctrl+d
: 下翻半屏。ctrl+u
: 上翻半屏。ctrl+e
: 向下滚动一行。ctrl+y
: 向上滚动一行。n%
: 到文件n%的位置。zz
: 将当前行移动到屏幕中央。zt
: 将当前行移动到屏幕顶端。zb
: 将当前行移动到屏幕底端。
-
文本编辑
插入i
: 在光标前插入;
一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,再按一次esc,就会出现8个=。这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线。I
: 在当前行第一个非空字符前插入;gI
: 在当前行第一列插入;a
: 在光标后插入;A
: 在当前行最后插入;o
: 在下面新建一行插入;O
: 在上面新建一行插入;:r filename
:在当前位置插入另一个文件的内容。:[n]r filename
:在第n行插入另一个文件的内容。:r !date
: 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。
改写插入
-
c[n]w
: 改写光标后1(n)个词。 -
c[n]l
: 改写光标后n个字母。 -
c[n]h
: 改写光标前n个字母。 -
[n]cc
: 修改当前[n]行。 -
[n]s
: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。 -
[n]S
: 删除指定数目的行,并以所输入文本代替之。 -
[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)个字符。 -
yor D
: 删除(剪切)当前位置到行尾的内容。 -
d[n]w:
删除(剪切)1(n)个单词 -
d[n]l
: 删除(剪切)光标右边1(n)个字符。 -
d[n]h
: 删除(剪切)光标左边1(n)个字符。 -
d0
: 删除(剪切)当前位置到行首的内容 -
[n] dd
: 删除(剪切)1(n)行。 -
:m,nd
:剪切m行到n行的内容。 -
d1G或dgg
: 剪切光标以上的所有行。 -
dG
: 剪切光标以下的所有行。 -
daw和das
:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。 -
d/f
:这是一个比较高级的组合命令,它将删除当前位置 到下一个f(f可以是任意内容)之间的内容。 -
p
: 在光标之后粘贴。 -
P
: 在光标之前粘贴。
撤消与重做(normal模式)
-
[n] u
: 取消一(n)个改动。 -
:
undo 5
– 撤销5个改变。 -
:undolist
– 你的撤销历史。 -
ctrl + r
: 重做最后的改动。 -
U
: 取消当前行中所有的改动。 -
:earlier 4m
– 回到4分钟前 -
:later 55s
– 前进55秒
查找
-
/something
: 在后面的文本中查找something。 -
?something
: 在前面的文本中查找something。 -
/pattern/+number
: 将光标停在包含pattern的行后面第number行上。 -
/pattern/-number
: 将光标停在包含pattern的行前面第number行上。 -
n
: 向后查找下一个。 -
N
: 向前查找下一个。
问题汇总
- Swap file “.gym.swp” already exists!
[O]pen Read-Only, (E)dit anyway, ®ecover, (Q)uit, (A)bort:
解决方法:在命令模式下,按下“R”,再按enter键可以恢复并退出,然后将生成的替换文件(.swp或者.swo或者.swn等)删除即可解决,
如果没有解决,可以参考:
https://blog.csdn.net/xiaoshunzi111/article/details/50051679?utm_source=blogxgwz5
2 . E37: No write since last change (add ! to override)
问题解释: E37:上次更改后没有写入(添加!重写)
出现该问题的原因是,上次编辑文件的时候,文件没有写入权限,上次修改没有保存,就会报这个错
解决方法:在:q后面加上!或者Ctrl+Z退出即可
-
文档是否修改查询
命令::f或ctrl+g