目录
为什么写这个Guideline
作为一个后端程序员,不可避免的会去操作服务器的资源,配置服务器的应用和配置。这个过程中一定会遇到编辑文本文件的情况,如果复制出来在图形界面编辑,然后再粘贴回去就太LOW了。所以掌握一个服务器端的文本编辑器是十分有必要的。这就涉及到一场圣战Vim和Emacs之争了,这里不参与讨论这个。之所以选择Vim,是因为小学为数不多接触计算机的时候用的就是Vi编辑器,所以也算是不忘初心了。本指引主要内容都来自于以为千锋教育的老师的视频教程,这里仅仅是做综合和编辑,以便于自己和他人参考使用。向这位老师表示感谢。言归正传,开始。
Vim编辑器的模式
- command mode
- edit mode
- visual edit mode (可视模式,可视行模式,可视块模式)
- extended command mode
Vim 是以命名模式为中心,通过不同的指令进入其他模式:
- i,a,o,O等命令进入编辑模式
- V,v,ctrl + v 等命令进入编辑模式
- : 进入扩展命令模式
命令模式
光标定位
- h,j,k,l 作为上下左右,这个应该形成习惯,提高效率
- ^ 移动到行首,$ 移动到行尾
- gg 移动光标到第一行行首,G移动到最后一行行首
- / 从上到下搜索关键字,支持正则表达式,例如^,$;n跳转到下一给关键字,N跳转到上一个关键字
- ? 从下到上搜索关键字,n跳转到上一个关键字,N跳转到下一个关键字
文本编辑
- y: yy 复制一行, 3yy 从当前行复制以下三行,包含当前行,ygg,当前行复制到第一行,yG从当前行复制到最后一行
- d: dd删除当前行,3dd删除当前行开始的三行,dgg,删除到首行,dG删除到最后一行
- p: 粘贴,粘贴到当前光标所在行的下一行
- x: 删除光标所在字符
- D: 删除光标之后一行的内容
- u: undo 撤销操作
- ctrl + r redo
- r: 替换单个字符
- R:进入替换模式,随意替换当前行内容
进入其他模式
a 进入编辑模式,位置在光标之后
i 进入编辑模式,位置在光标之前
o 进入编辑模式,位置在光标所在行下一新建行
O 进入编辑模式,位置在光标所在行的上一新见行
A 进入编辑模式,位置在贯标所在行的行尾
:进入扩展命令模式
v 进入可视模式
V 进入可视行模式
ctrl+ v 进入可视块模式
编辑模式(插入模式)
ctrl + p 自动补全
ctrl + n 自动补全
可视块模式
通过ctrl + v 进入可视块模式:
- 块插入(在指定块钱加入):选中块,I,编辑,ESC退出(一开始编辑的内容只显示在第一行,ESC退出后才全部显示)
- 块替换: 选中块,r,编辑,ESC,替换块中所有的字符
- 块删除:选中块,d或者x
- 块复制,选中块,y
扩展命令模式
保存退出
- :10 进入第十行
- :w 保存(ctrl +s 不是保存,会导致屏幕锁定,ctrl +q 才能退出)
- :q 退出
- :wq 保存并退出
- :w! 强制保存
- :q! 不保存退出
- :wq! 强制保存退出
- :x (ZZ)保存并退出
查找替换
- :范围 s/old/new/选项
例子:
:1,5 s/root/hulk/
:5,$ s/root/hulk/
:1,% s/root/hulk/ (:% s/root/hulk) % 表示全文
😒/root/hulk/g g表示全局
:% s#/var/log#/var/logs 可用#作为分割符号,因为替换的文本中含有/
:,8 s/root/yang/g 从当前行到第八行
:5,10 s/.*/#&/ & 表示old的文本
读入文件/写文件
- :w 保存
- :w /tmp/aa.txt 保存文件内容到aa.txt文件中
- :1,3 w /tmp/bb.txt 保存1,3行到文件bb.txt中
- :r /etc/hosts 导入hosts文件内容到当前位置
- :5 r/etc/hosts 导入hosts文件内容到第5行后面的位置
设置环境
临时设置
:set nu 设置行号
:set ic 设置忽略大小写
:set ai 设置自动缩进
:set list 显示控制字符
:set nonu 取消显示行号
:set noic 取消忽略大小写
永久设置
/etc/vim
~/.vimrc
其他
vim -O 打开两个文件
vim -O /etc/hosts /boot/grub, :qall 退出全部文件 :q 退出一个文件
vimdiff 文件比较
总结
记录和记忆都对真正学会以上技巧没有太大的效果,应该参照着不断刻意联系,形成肌肉记忆。