跳到主要内容

vim 使用记录

· 阅读需 9 分钟
inhere

vim 使用记录, 常用快捷键和命令

常用快捷键和命令

回到 正常模式normal-mode

  1. 在任何模式下 按 Esc
  2. 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

如何重新载入文件

  1. 重新载入当前文件:
    • :e
    • :e! 放弃当前修改,强制重新载入
  2. 重新载入所有打开的文件:
    • :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 可返回之前的文件

不小心在当前面板打开了新的文件覆盖了正在编辑的文件. 如何返回之前打开的文件?

  1. 使用 Ctrl+^ (即 Ctrl+Shift+6) 或者 Ctrl+6 可快速返回之前打开的文件,再按又会回到当前文件
  2. 使用 :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 tablehelp -p

复制剪切

Vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+,其中 + 号为系统粘贴板, 为临时粘贴板。系统剪切板中的内容可在其他程序中使用。 上面的复制指令都可以配合剪切板进行操作。

  • "nyw 复制当前单词到 n 号剪切板(双引号开始)
  • "np 粘贴 n 号剪切板内容到当前位置后
  • "+y 复制当前行到系统剪切板
  • "+ny 复制当前行加下面 n 行到系统剪切板
  • "+p 粘贴系统剪切板内容到当前位置后

上面的操作若无法复制或剪切到系统剪切板,则可能是没有打开 clipboard。可用 :ve查看是否功能打开。

  • Shift-Insert 也可复制系统剪切板的内容到vim

另外的实现复制方法(来自在无clipboard 的vim 中, 如何使用系统剪切板):

  1. 按住shift 键,鼠标选择。 按住 Shift 键不松手,用 鼠标左键 选择文本,再使用 鼠标右键 可打开系统右键菜单(此时仍然不要松开Shift),选择复制即可。
  2. 设置选项,关闭mouse, 再用鼠标选择。