vim非完全学习手册

vim非完全学习手册

前言

vim是vi的增强版本,是Linux系统下的一款常用文本编辑器。我们在Linux系统下配置软件、编写代码,都离不开文本编辑器。由此看来,学会vim的使用是很重要的。本文将讨论vim的一些常用操作,亦可以作为非完全手册。因本人技术有限,如有错漏,欢迎纠正于补充。

vim的最基本操作

我们可以使用以下操作流程通过vim在当前目录创建一个文件test.txt,并保存退出。学会了这些,在进入vim编辑器后,不会退出而去直接关闭终端或强行关电源的尴尬境地就可以避免了。

  1. 创建文件:

    touch test.txt
  2. 使用vim打开:

    vim test.txt
  3. i 键进入插入模式,正常通过键盘输入自己需要输入的文本。
  4. 完成文本输入后,按 Esc 键退出插入模式。
  5. : 键进入扩展命令模式,输入 wq 保存并退出。
  • 以上是vim编辑器的最基本操作,我们亦可以不使用 touch 命令创建文件,直接运行 vim test.txt vim会提示新文件,最后我们在扩展命令模式下使用 wp 命令时vim会自动创建文件并保存。如此,vim 后既可以接相对路径,亦可以接绝对路径。
  • 另外,vim的扩展命令模式下,命令 w 和命令 q 均可以单独使用,命令 w 用于保存文档,命令 q 则用于退出。退出时若文件有修改但没有保存,操作会失败,此时可以使用 q! 命令强行退出。
  • 学会了以上内容,相当于学会了在Windows系统下打开MS Word,打了几个字,然后保存并退出一样。这肯定不能算是学会了vim,甚至连入门都不算。我们需要对其有一个系统化的学习。

vim的编辑器工作模式

vim常用情况下有四个模式,分别是:

  1. 打开时的命令模式(Command Mode);
    此模式用于一般的命令操作,比如快速的移动光标。
  2. i 键进入的插入模式( INSERT Mode);
    此模式用于文本编辑。
  3. : 键进入的扩展命令模式(Extended Command Mode)。
    此模式包含一些扩展的命令输入,比如保存和退出。
  4. v 键进入可视模式(VISUAL Mode)。
    此模式包含可视内容选择操作。

vim打开时会处于命令模式,通过按键方式进入其他模式。在插入模式时,我们可以看到终端左下角显示 -- INSERT -- 字样;在扩展命令模式,我们可以在左下角看到显示“ : ” ;在可视模式,左下角显示 -- VISUAL -- 字样。如需退回到命令模式,按Esc键即可。

1.vim命令模式下的常用操作

以下操作均在命令模式中进行,在操作前请注意检查左下角不要有-- INSERT ---- VISUAL --: 字样。如不在或不确定是否处于命令模式,请按Esc键进入。

光标的移动:

  1. 可以使用键盘上的方向键移动光标,但考虑更高效的使用,可尝试学习vim的命令键:h(左)j(下)k(上)l(右)。
  2. 可以通过按键 0 快速调至当前行首;使用按键 $ 快速调制行末。(注意:$需使用Shift+4实现)
  3. 可以通过使用 gg 按键快速跳至首行;使用 G 按键快速调至末行。(注意前者时按两次g,后者通过Shift+G实现)
  4. 可以使用 7 G 按键快速跳至第七行;即通过按出 行号后再加大写字母 G ,即可快速跳转至那一行。
  5. 可以使用 /string 命令从内容中查找关键词;string表示字符串,即输入关键字进行查找;我们可以使用(n/N)在查询到的多个结果中上下移动箭头。我们可以使用 /^string 这种,关键字前加 ^ 符号,指定搜索以此关键字开始的行; 使用/string$ 这种,关键字后加$符号,指定搜索以此关键字结尾的行。

文本编辑:

  1. 复制操作:按y键复制当前选定内容;使用 yy 命令复制当前行;使用 5yy 复制光标及以后共5行(yy前输入的数字决定行数);使用 ygg 复制从第一行至光标一行内容;使用 yG 复制从光标行至末行内容。
  2. 剪切操作:按D(需Shift+D)剪切光标处至当前行尾的内容。与以上复制操作类似,剪切操作中使用 dd 剪切光标所在行内容;使用 5dd 剪切光标及以后共5行;使用 dgg 剪切从第一行至光标一行内容;使用 dG 剪切从光标行至末行内容。以上命令可用于删除。
  3. 粘贴操作:使用 p 键将复制的内容粘贴(paste)到光标处。
  4. 撤销与重做:使用 u 撤销(undo)之前的操作,使用 Ctrl+r 组合键重做(redo)撤销的操作。
  5. 按x键删除光标所在字符,使用 r 修改光标处一个字符。

进入其他模式:

  1. 进入插入模式:使用 i 键进入插入模式;使用 I 键进入插入模式并使光标移动到行首;使用 a 进入插入模式使光标自动后退一位,退出模式时会前进一位。使用 A 进入插入模式使光标自动跳到当前行尾;使用 o 进入插入模式会自动于光标所在行后面创建新行;使用 O 进入插入模式会自动于光标所在行前面创建新行。
  2. 进入扩展命令模式:使用 :(Shift+;键)进入扩展命令模式,此模式亦有人称其为末行模式(可能于命令于末行输入有关)。
  3. 进入可视化模式:使用 v 进入可视模式;使用Ctrl+V进入可视块模式;使用 V(Shift+V键) 进入可视行模式。可视模式用于可视化的内容区域选定,以进入模式时光标位置为起始,方向键移动光标选定结束位置。选定后按 y 键复制内容,按 p 键可粘贴内容。
  4. 进入替换模式:按 RShift+R键)进入替换模式,与 r 不同,替换模式是一个单独的模式,可以连续替换内容。区别于插入模式,该模式是对光标所在位替换,而不是插入。

退出:

  • 命令模式下,按住Shift键按两次 z 键,即输入 ZZ 即保存并退出。此方法不建议使用,建议使用扩展命令模式下的退出命令。

2.vim插入模式下的自动代码补全

在使用vim的插入模式编辑文本时,如果文中有单词多次出现,可在输入部分内容情况下按Ctrl+P进入自动代码补全。

3.可视模式区块编辑

  1. 块前部插入:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按Shift+I组合键输入I进入插入模式,输入需要插入的内容,按Esc键退出模式后稍作等待即可完成块前插入。此功能常用作多行添加#号注释。
  2. 块替换:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按r键进入块替换功能,输入要替换城的字符即可完成替换。
  3. 块删除:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按x键删除选定的块,此操作亦可以使用d剪切完成。
  4. 块复制:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按y键复制块,在需要粘贴处按p粘贴块,具体粘贴效果请自行尝试。块剪切请参考上一条。

4.扩展命令模式常用操作

在命令模式下按:(Shift+;)键进入扩展命令模式。

快速跳至指定行:

  • 在扩展命令模式输入行号按回车键可跳转至指定行。

保存与退出:

  1. 在扩展命令模式下,输入w回车可保存文件。
  2. 在扩展命令模式下,输入q回车可退出,但文件有未保存更改时会失败。
  3. 在扩展命令模式下,输入wq回车可保存并退出。
  4. 在扩展命令模式下,输入w!回车可强行保存。
  5. 在扩展命令模式下,输出q!回车可强行退出,不保存退出。
  6. 在扩展命令模式下,输入wq!回车可强行保存并退出。
  7. 在扩展命令模式下,输入x回车可保存并退出,此处x为小写,大写X为添加密码,慎用!

查找并替换:

  • 语法,此命令使用时需注意操作的内容中不得出现命令中使用的分隔符。

    :范围 s/查找的内容/替换内容/选项
    :范围 s#查找的内容#替换内容#选项
    :范围 s@查找的内容@替换内容@选项
  1. 范围描述:
    使用 1,4 格式可设定范围为行1~行4;使用 5,$ 可设定范围为行5~最后一行;使用 % 可设定范围为全文;使用 ,7 可设定范围为当前光标所在行~行7。
  2. 选项:
    默认情况下,不使用选项时每行只会替换查找到的第一个结果。我们可以使用g选项设置全局替换。
  3. 示例:

    # 将第21行至第30行的第一个root替换为lexsion
    :21,30 s/root/lexsion/
    
    # 将第31行至最后一行的所有root替换为lexison
    :31,$ s/root/lexsion/g
    
    # 将全文中每一行的所有lexsion替换为root
    :% s/lexsion/root/g
    
    # 将全文中每一行的所有/dev/sda替换为dev/sdb,因操作内容中有/,所以将分隔符换成#。
    :% s#/dev/sda#/dev/sdb#g
    
    # 将第4到第6行每行前面添加#号,一般用于注释。此例中使用了正则表达式。
    :4,6 s/.*/#&/
    
    # 将第4到第6行每行前面的#号删除,一般用于取消注释。此例中使用了正则表达式。
    :4,6 s/^#//
  4. 取消高亮显示:
    我们在执行查找替换类操作后会留下相关内容的高亮,退出重新进入亦不会取消,我们可以尝试查询一段不存在于文件中的内容取消高亮,或于扩展命令模式下使用以下命令取消高亮。

    :noh

文件读写:

  1. 扩展命令模式下,输入w回车即可保存文件。如果我们需要将文件另存为,比如另存到/root/file2.txt,可使用以下命令完成,即在w命令后空格加上另存为的目录及文件名。

    :w /root/file2.txt
  2. 若我们需要将文件中的部分行(比如4~8)另存为(比如/root/file3.txt),可以在以上命令前添加范围,命令如下:

    :4,8 w /root/file3.txt
  3. 读入文件至当前光标所在行后。例如,将/root/file3.txt读入,命令如下:

    r /root/file3.txt
  4. 如果我们需要将文件读入到指定行之后,除了将光标移动到指定行处,我们可以使用在以上命令前添加行号的方式指定行。比如我们将其读入到第四行之后:

    4 r /root/file3.txt

环境配置:

  1. 常用临时环境配置命令:

    # 设置行号
    set nu
    
    # 显示控制字符
    set list
    
    # 不区分大小写
    set ic
    
    # 自动缩进
    set ai
    
    # 设置的项目前加no可以表示取消该设置,例如取消行号:
    set nonu
    • 注意,以上命令是在vim的扩展命令模式使用。
  2. 设置永久配置。以上方式设置的配置会在退出vim时还原,如需永久配置,需要创建配置文件并将以上命令写入其中。创建/etc/vimrc可设置全局配置,对所有用户有效。创建~/.vimrc可设置用户配置,对当前用户有效。相信经过上文的学习你是能够完成这个配置的。

双文件编辑

  • vim可以同时打开两个文件,一般用于我们需要对照这一个文件编辑另一个文件的场景,使用以下命令打开目录/root/下的file1和file2:

    # 注意,以下命令中-O为大写,此命令打开后界面呈现纵向分割:
    vim -O /root/file1 /root/file2
    
    # 注意,以下命令中-o为小写,此命令打开后界面呈现横向分割:
    vim -o /root/file1 /root/file2
    
    # 以下命令打开后会对比两个文件,不同处会有高亮:
    vimdiff /root/file1 /root/file2
  • 如需在打开的两个文件界面中切换光标,需要按Ctrl+ww切换。(按住Ctrl键,再按两次w键)
    如需退出两个文件,可在扩展命令模式下运行以下命令退出:

    qall

以上是一些vim的常用操作,想要熟练使用vim,需要日常多加练习,让操作成为习惯。

参考:

Vim help files
https://vimhelp.org/

Vim 中文文档计划-GitHub
https://github.com/yianwillis/vimcdoc

vi编辑器教学视频1-千锋教育-BiliBili
https://www.bilibili.com/video/av13186650/?p=3

vi编辑器教学视频2-千锋教育-BiliBili
https://www.bilibili.com/video/av13186650/?p=4

标签: VIM

添加新评论