vim 使用记录, 常用快捷键和命令
常用快捷键和命令
回到 正常模式normal-mode
- 在任何模式下 按
Esc
- 按
Ctrl+[
常用快捷键
进入插入模式
i
在光标前开始插入a
在光标后开始插入A
在行末开始插入o
在当前行的下一行新建空白行开始插入O
在当前行的上一行新建空白行开始插入跳转(在
normal-mode
下)
按键 | 说明 | 延伸 |
---|---|---|
0 | 行头 | y0 从光标位置复制到行头 d0 从光标位置删除到行头 |
^ | 行头(非空白字符) | y^ 和 d^ 同上 |
Shift+4\$ | 行尾 | y\$ 从光标位置复制到行尾 d\$ 从光标位置删除到行尾 |
w | (从左至右)前进一个单词 | yw 向前复制一个单词 dw 向前删除一个单词 |
W | 前进一个单词(跳过符号,如空格等) | 同上 |
b | 后退一个单词 | yb 向后复制一个单词 db 向后删除一个单词 |
B | 后退一个单词(跳过符号,如空格等) | 同上 |
- 操作(在
normal-mode
下)
按键 | 说明 | 延伸 |
---|---|---|
d | 删除(选定的范围) | dd 删除当前行, dw 向前删除一个单词,db 向后删除一个单词, |
u | 撤销上一步的操作 | |
Ctrl+r | 恢复上一步被撤销的操作 |
使用问题记录
改动了只读文件如何快速保存
:w !sudo tee %
快速读取文件内容插入到当前光标位置
:r /etc/network/interface
这样interface的文件内容就添加到当前文件光标所在位置了。
如何临时回到 shell 环境,又如何返回正在编辑的vim
:sh
将启动一个子 shell,使用C-d (即 ctrl+d)
返回 vim
如何全选
- 先使用
G (即 Shift+g)
跳到 文件尾, 按V (即 Ctrl+v)
进入可视模式,再按 两次g
跳到文件头,即全选了所有文本
如何关闭vim一个窗口打开的多个文件中的一个?
- 切换到你想关闭的文件, 按
ZZ (即 Shift+z+z)
即可保存并退出 - 切换到你想关闭的文件窗口. 然后命令模式输入
:bd
即: buffers delete
- 使用
:ls
浏览所有缓冲区文件,找到要关闭的文件所在的编号,使用:bd number
e.g.:bd 2
如何重新载入文件
- 重新载入当前文件:
:e
:e!
放弃当前修改,强制重新载入
- 重新载入所有打开的文件:
:bufdo e
或者:bufdo :e!
:bufdo
命令表示把后面的命令应用到所有buffer中的文件。
添加和删除注释的快捷方法 ?
按键操作:
- 注释:`ctrl+v` (Window 则是 `ctrl+q` ) 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,
然后按大写的
L
,再插入注释符,比如#
或//
,再按Esc
,就会全部注释了。- 删除:先按`v`,进入`visual模式`,横向选中列的个数(如”#”注释符号,需要选中两列),
再按
Esc
,再按ctrl+v
进入列编辑模式,向下或向上移动光标,选中注释部分,然后按d
, 就会删除注释符号(e.g.#
)。
PS:当然不一定是shell的注释符”#”,也可以是”//”,或者其他任意的字符;vim才不知道什么是注释符呢,都是字符而已。
- 使用替换命令:(所有替换命令末尾加上c,每个替换都将需要用户确认。 如
:%s/old/new/gc
,加上i则忽略大小写(ignore)。):% s/^/\/\//g
在全部内容的行首添加//号注释:2,50 s/^/\/\//g
在2~50行首添加//号注释:2,50 s/^\/\///g
在2~50行首删除//号:.,109s/^/#/g
这里我把光标移动到102行,前面的.
代表当前行,表示从当前行到第109行所有开头都用#替换,:102,109s/^/#/g
也可以这样写:.,+7s/^/#/g
再或者:102,+7s/^/#/g
都是一样的效果。
使用帮助?
:help command
查看指定命令的帮助Ctrl+]
打开帮助文档中的文本链接,Ctrl+t
可返回之前的文件
不小心在当前面板打开了新的文件覆盖了正在编辑的文件. 如何返回之前打开的文件?
- 使用
Ctrl+^ (即 Ctrl+Shift+6)
或者Ctrl+6
可快速返回之前打开的文件,再按又会回到当前文件 - 使用
:ls
浏览所有缓冲区文件,找到要编辑的文件所在的编号,使用:b number
e.g.:b 2
前进和后退功能
可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用 Ctrl-o
执行后退,使用 Ctrl-i
执行前进。
格式化粘贴
vim粘贴代码无法保持原来的格式,有注释的话还会把余下的行都给加上注释。很不方便。
在粘贴前: :set paste
再粘贴就不会有这个问题了,粘贴后 :set nopaste
还原设置。
可以在配置里设置快捷键更方便切换
tab 标签页的使用
- 命令:
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
:tabfrist 第一个
:tablast 最后一个
- 标准模式下:
gt
,gT
可以直接在tab之间切换。 在前面加上数字也可以切到指定的tab, e.g.2gt
跳到第二个tab 更多可以查看帮助:help table
,help -p
复制剪切
Vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+
,其中 +
号为系统粘贴板,”
为临时粘贴板。系统剪切板中的内容可在其他程序中使用。
上面的复制指令都可以配合剪切板进行操作。
"nyw
复制当前单词到 n 号剪切板(双引号开始)"np
粘贴 n 号剪切板内容到当前位置后"+y
复制当前行到系统剪切板"+ny
复制当前行加下面 n 行到系统剪切板"+p
粘贴系统剪切板内容到当前位置后
上面的操作若无法复制或剪切到系统剪切板,则可能是没有打开
clipboard
。可用:ve
查看是否功能打开。
Shift-Insert
也可复制系统剪切板的内容到vim
另外的实现复制方法(来自在无clipboard 的vim 中, 如何使用系统剪切板):
- 按住shift 键,鼠标选择。
按住
Shift
键不松手,用鼠标左键
选择文本,再使用 鼠标右键 可打开系统右键菜单(此时仍然不要松开Shift
),选择复制
即可。 - 设置选项,关闭mouse, 再用鼠标选择。