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 numbere.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 numbere.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, 再用鼠标选择。
