我们知道 vi 是一个功能强大的文本编辑器,而 vim 则是 vi 的高级版本,vi 可以用不同的颜色显示文本内容,可以对配置文件、shell 脚本、程序代码等进行编辑操作,所有的 Linux 发行版系统上都会默认内置 vi 编辑器。接着,梳理一下 vi/vim 的常见知识点,一起玩转 vi/vim 编辑命令吧。
一、三种工作模式
vi/vim 编辑器有三种工作模式,即命令模式、输入模式、底线命令模式,而这三种工作模式的切换和基本使用,如图:
该图描述了操作 vi/vim 编辑器的基本流程:通过vi 文件名命令进入编辑器的命令模式,然后输入a或i或o中的任意一个键,就可以进入文本的编辑输入模式了,当输入完成后,通过esc键回到命令模式,再通过 : 进入底线命令模式,这意味着可以通过q键退出编辑器,也可以通过wq保存并退出,当然也可以加上!进行强制退出或保存并退出。
二、玩转常见操作
1、光标移动操作
- 向上方向键 或 K键:上移一格
- 向下方向键 或 J键:下移一格
- 向左方向键 或 H键:左移一格
- 向右方向键 或 L键:右移一格
- home键 或 数字0:移动到当前行的最前面
- end键 或 符号$:移动到当前行的最后面
- gg:移动到文本第一行的第一个字符处
- G:移动到文本最后一行的第一个字符处
- n+G:n为数字,移动到文本第n行的第一个字符处
- n+Enter:n为数字,向下移动n行
- V,v:V将光标经过的行反白选择,v将光标经过的地方反白选择
- ctrl+v:将光标选择的块区域反白选择
- y:将反白的地方复制到剪贴板
- d:将反白的内容删除
2、文本翻页操作
- pgup键 或 ctrl+b快捷键键:向上翻页
- pgdn键 或 ctrl+f快捷键键:向下翻页
3、CRUD操作
- ?+str:str为搜索字符串内容,? 向上查找
- /+str:str为搜索字符串内容,/ 向下查找
- N,n:N查找上一个,n查找下一个
- :n1,n2s/str1/str2/g : n1, n2为数字, 从第n1行~第n2行之间查找str1字符串, 并将其替换成str2
- yy :复制光标所在一整行
- n+yy :n为数字,复制光标所在的向下n行
- y+0:复制光标所在的那个字符到该行行首的所有数据
- y+$:复制光标所在的那个字符到该行行尾的所有数据
- y+G:复制光标所在行到最后一行的所有数据
- y+1G:复制光标所在行到第一行的所有数据
- P,p :P向上一行粘贴复制的数据,p向下一行粘贴复制的数据
- dd :删除光标所在一整行
- ndd :n为数字,删除光标所在的向下n行
- d^:删除当前光标之前到行首的所有字符
- d$:删除当前光标处行尾的所有字符
- X, x :X向前删除一个字符(相当于delete键),x向后删除一个字符(相当于backspace键)
- u :向前撤销,撤销上一步操作
- ctrl+r :向后撤销
- . :小数点.,重复上一步操作
4、底线命令模式操作
- :q 退出
- :q! 强制退出
- :w 保存当前文件
- :w a.txt 另存为a.txt文件
- :w! 强制保存
- :qw 退出并保存
- :qw! 强制退出并保存
- :set nu 设置显示行号
- :set nonu 取消显示行号
- :set fileencoding 显示当前文件的编码格式
- :set fileencoding=gbk 设置当前文件的编码为gbk格式
- :set fileformat 显示当前文件的断行格式
- :set fileformat=unix 设置当前文件的断行格式
5、多文件多窗口操作
- ctrl + w +k :光标切换到上一个窗口
- ctrl + w +j :光标切换到下一个窗口
- :sp 文件名 :打开新窗口并显示新文件,若只输入:sp,则两个窗口均显示同一个文件
- vi 1.txt 2.txt :同时打开两个文件
- :N :编辑上一个文件
- :n :编辑下一个文件
- ctrl + w +q:离开当前窗口【亲测不可用】
- :files:列出当前用vim打开的所有文件【亲测不可用】
三、问题记录
之前遇到了 Vim 中复制粘贴时出现的格式错乱问题,并没有保存成自己想象中的格式,记录下解决方式,有以下几种方法:
方式1::set paste
vi/vim 进入编辑界面后,在底线命令模式中输入:set paste,进入 paste 模式后,按 i 键进入插入模式,然后再粘帖,文本格式不会错乱了。
方式2:在~/.vimrc文件中加入快捷键设置
这样,在普通模式下按 F10 (你也可以用自己喜欢的按键)就会进入 paste 模式,按 i 进入插入模式后粘帖,然后按 回到普通模式,再按 F11 结束 paste 模式。
方式3:同方法2,但会合并快捷键
set pastetoggle=<F11>
这样就可以把上面的 F10 和 F11 合并为一个快捷键来切换 paste 模式了。
其他方式:使用剪切板的方式
我经常用方式1,简单易操作,方式 1~3 基本够用了,设置剪切板的方式,这里不再去深入研究了。