这篇文章上次修改于 1722 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

以下内容基于《构建高可用Linux服务器》作者 余洪春,对其错误修改和补充

命令模式光标移动
h 或向左方向键光标向左移动一个字符
j 或向下方向键光标向下移动一个字符
k 或向上方向键光标向上移动一个字符
l 或向右方向键光标向右移动一个字符
Ctrl + f屏幕向前翻一页
Ctrl + b屏幕向后翻一页
Ctrl + d屏幕向后翻半页
Ctrl + u屏幕向前翻半页
+光标移动到下一行的非空格符的开头位置
-光标移动到上一行的非空格符的开头位置
n<space>按下数字键后再按空格键,光标会向右移动这一行的 n 个字符
0 (HOME)(数字 0 )移动到这一行的第一个字符处
$ (END)移动到这一行的最后一个字符处
H光标移动到当前屏幕最上方的那一行
M光标移动到当前屏幕中央的那一行
L光标移动到当前屏幕最下方的那一行
G光标移动到文件的最后一行
nG移动到当前文件的第 n 行
n<Enter>光标向下移动 n 行
命令模式查找与替换
/word在光标之后查找一个名为word的字符串,按 Enter 键,
然后使用 n 键查找下一个(向下)
?word在光标之前查找一个名为word的字符串,按 Enter 键,
然后使用 n 键查找下一个(向上)
:n1,n2s/word1/word2/g在第 n1 与 n2 行之间查找 word1 这个字符串,并将
该字符串替换为 word2,符号 / 是可以用 # ,@ ,% 等
符号替换,以区别要替换的字符串中有 / 的情况
:1,$s/word1/word2/g在第一行与最后一行之间查找 word1 这个字符串,并将
该字符串替换为 word2
:1,$s/word1/word2/gc在第一行与最后一行之间查找 word1 这个字符串,并将
该字符串替换为 word2,且在替换前显示提示符让用户
确认(conform)
一般模式删除,复制与粘贴
x ,Xx 为向后删除一个字符,X 为向前删除一个字符
nx ,nX向后删除 n 个字符,向前删除 n 个字符
dd删除光标所在的那一整行
D删除光标所在字符以及其后此行所有字符
ndd删除光标所在行的向下 n 行
dnG删除光标所在行到第 n 行的所有数据
dG删除光标所在行到最后一行的所有数据
yy ,YY复制光标所在行
nyy复制光标所在行的向下 n 行
ynG复制光标所在行到第 n 行的所有数据
yG复制光标所在行到最后一行的所有数据
p,Pp 为复制的数据粘贴在光标下一行,P 为粘贴在光标上一行
J将光标所在行与下一行的数据结合成一行
u恢复前一个动作(undo)
编辑模式
i,I插入:在当前光标所在处插入开始输入字符,i 在光标所在字符之前,
I 在光标所在行非空格符的开头位置
a,A添加:由当前光标所在处追加开始输入字符,a 在光标所在字符之后,
A 在光标所在行的末尾
o,O插入新的一行:新一行行首开始输入字符,o 在光标所在行的下一行,
O 在光标所在行的上一行
r,R替换:r 替换光标所指的那一个字符;R 连续替换光标所指的文字,直到
按下 Esc 键为止
Esc退出编辑模式,回到一般模式
命令行模式
:w将编辑的数据写入硬盘文件中
:w!若文件属性为只读,强制写入该文件
:q退出 vi(常用),快捷方式为 Shift + ZZ
:q!若曾修改过文件,又不想保存,使用!为强制退出不保存文件,
快捷方式为 Shift + ZQ
:wq保存后退出,若为 :wq! ,则表示强制保存后退出
:w [filename]将编辑数据保存为另一个文件(类似另存新文档)
:r [filename]在编辑的数据中,读入另一个文件的数据。即将 filename
这个文件内容加到光标所在行的后面
:set nu显示行号,设定之后,会在每一行的前面显示该行的行号
:set nonu与 set nu 相反,为取消行号显示
:set hlsearch开启搜索高亮,可编辑 /etc/vimrc 来取消所有高亮
:set nohlsearch关闭搜索高亮,可编辑 /etc/vimrc 来取消所有高亮
:n1,n2 w [filename]将第 n1 行到第 n2 行的内容保存为名为 filename 的文件

/etc/vimrc 或家目录的 .vimrc 配置文件

  • set nobackup :不要备份文件,使用 backup 备份文件(原文件加后缀~)
  • set noswapfile :不生成 .swap 文件
  • set number :显示行号
  • set cindent :设定 c 风格缩进,可使用 nocindent 取消设置
  • set autoindent :设定自动缩进,每行缩进与上一行相等,可使用 noautoindent 取消设置
  • set shiftwidth = 2 :设定缩进为两个空格
  • set tabstop = 2 :设定制表符为两个空格
  • set softtabstop = 2 :设定软制表符为两个空格
  • set expandtab :缩进和(软)制表符使用空格替代,可用 noexpandtab 取消设置
  • set ruler :显示光标所在行列号
  • set mouse = v :如果我们用 set mouse = a 启动了所有模式,屏蔽了鼠标的右键功能,那么就可以用此语法让其在 Vim 可视化模式下也能使用鼠标右键复制功能
  • syntax on :启动语法高亮