vi、vim的使用

还记得当年第一次使用vim怎么都退不出去的焦灼处境,后来慢慢变得熟悉,但是可能有个完美主义的情结,总想要一次达到很高的完成度,鸟哥的Linux私房菜的相关内容写的很好,发现很适合自己,来记录一遍吧。

vi是一种文本编辑器,大多数主流的Linux机器都会安装vi,vim是vi的进阶版本,拥有更多的功能。首先需要了解的是,vi、vim有三种模式,默认进入后的模式是一般命令模式;编辑文件时是编辑模式;执行命令时是命令模式

vi其实已经很完善了,vim比vi多了对代码文件的语法高亮、代码补全、区块选择,正则表达式搜索、多窗口等。

三种模式的切换

一般命令模式是一种中间状态,命令模式和编辑模式无法直接切换。

  • 一般命令模式-->>命令模式
:
?
/
  • 命令模式-->>一般命令模式
Esc
  • 一般命令模式-->>编辑模式
i     在光标处插入,进入编辑模式
a     在光标下一个字符处插入,进入编辑模式
o     在光标下一行插入,进入编辑模式
I     在光标所在行第一个非空字符前插入,进入编辑模式
A     在光标所在行最后一个字符后插入,进入编辑模式
O     在光标上一行插入,进入编辑模式
  • 编辑模式-->>一般命令模式
Esc

一般命令模式

新建一共文件或者打开一共文件,默认就是此模式。

  • 光标的简单移动
h     光标左移一个字符,等同于←
j     光标下移一行,等同于↓
k     光标上移一行,等同于↑
l     光标右移一个字符,等同于→
  • 光标的比较大范围的上下移动
H     光标移动到屏幕显示的第一行
M     光标移动到屏幕显示的中间一行
L     光标移动到屏幕显示的倒数第5行(鸟哥Linux私房菜里写的是屏幕最后一行)
G     光标移动到最后一行
nG    光标移动到第n行,n是数字
gg    光标移动到文件第一行,相当于1G
n<Enter>     n是数字,<Enter>是回车,会向下移动n行
  • 光标的比较大范围的左右移动
0     光标移动到本行的第一列
$     光标移动到本行的最后一列
n<space>     n是数字,<space>是空格,会向右移动n个字符
  • 翻页、翻半页
ctrl + f     向下翻一页
ctrl + b     向下翻一页
ctrl + d     向下翻半页
ctrl + u     向上翻半页
  • 进入编辑模式
i     在光标处插入,进入编辑模式
a     在光标下一个字符处插入,进入编辑模式
o     在光标下一行插入,进入编辑模式
I     在光标所在行第一个非空字符前插入,进入编辑模式
A     在光标所在行最后一个字符后插入,进入编辑模式
O     在光标上一行插入,进入编辑模式    
r     替换光标的下一个字符,不会进入编辑模式
R     在光标处开始一直替换字符,会进入替换模式,
  • 剪切、复制、粘贴、撤销
x     向后剪切一个字符
X     向前剪切一个字符(不包含本字符)
nx     n是数字,代表一次剪切n个字符
dd     剪切本行
ndd     n是数字,剪切n行
d0     剪切本行第一个字符到本字符之间的字符串(不包含本字符)
d$     剪切本字符到本行最后一个字符之间的字符串
d1G     剪切第一行到本行的行
dG     剪切本行到的最后一行
yy     复制本行
nyy     n是数字, 复制n行
y0      复制本行第一个字符到本字符之间的字符串(不包含本字符)
y$      复制本字符到本行最后一个字符之间的字符串
y1G      复制第一行到本行的行
yG      复制本行到的最后一行
p     在此下一行/字符粘贴,
P     在此上一行/字符粘贴,
#扩展,好像没什么用,已经很容易做到这个操作了
ynG   n是数字,表示复制本行到n行之间、或n行到本行之间的行
u     撤销上一步操作
.     重复上一个操作
c     删除数据,10cj代表删除向下删除10行的数据(包括本行)
J     将本行和下一行合并为一行,即删除本行的回车符
ZZ    如果文件未修改则不保存退出,如果已经修改,则保存后退出
q:    查看历史编辑记录

命令模式

  • 查找特定关键词
/word<Enter>     <Enter>是回车,向下查找第一个`word`关键词
?word<Enter>     <Enter>是回车,向上查找第一个`word`关键词
n     如果刚刚查找完,表示继续向这个方向查找
N     如果刚刚查找完,表示继续向另一个方向查找
  • 查找并替换
:n1,n2s/word1/word2/g     n1、n2是数字,向下查找并替换`word1`关键词为`word2`
:n1,n2s/word1/word2/gc    每一次替换都需要确认
:1,$s/word1/word2/g       代表从文件头到文件尾查找并替换
  • 临时退出,执行shell命令
:!<command>     <command>是要执行的shell命令
  • 显示/隐藏文件的行数
:set nu     显示文件的行数
:set nonu     隐藏文件的行数
  • 退出
:q     退出文件编辑
:q!     强制退出文件编辑。即不保存文件直接退出
:wq     保存并退出
:wq!    强制保存并退出
  • 保存文件
:w                 保存文件
:w 新的文件名       保存文件到另一个文件
:w!                强制保存,权限可变为可写的情况下
:n1,n2 2 新的文件名          保存n1行到n2行之间的内容到另一个文件
  • 读入文件
:r 待读的文件     追加待读的文件到光标后
  • 一些环境变量
:set bg=dark      切换背景主题,深蓝色的字体偶尔不明显
:set hlsearch     设置高亮搜索
:set nohlsearch      取消设置高亮搜索
  • 多文本切换的编辑
:files      查看编辑的文件
:n          编辑下一个文件
:N          编辑上一个文件
  • 加密
:X         可以加密文件,但是要注意加密后密码错误的情况下不要修改文件.

vim额外一些功能

  • 区块选择
v     按照字符选中
V     按照行数选中
ctrl+v     按照矩阵区块选中
  • 多窗口
:sp             默认会另一个横向窗口打开同一个文件
:sp 文件名       新横向窗口打开新的文件
:vsp             默认会另一个纵向窗口打开同一个文件
:vsp 文件名       新纵向窗口打开新的文件
ctrl + w + ↑     移动到上方的窗口
ctrl + w + j     移动到上方的窗口
ctrl + w + ↓     移动到下方的窗口
ctrl + w + k     移动到下方的窗口
ctrl + w + q     关闭窗口退出(修改文件后就不能这样了)
  • 关键词补全
ctrl + x ,ctrl + n        当前文件内容补全
ctrl + x ,ctrl + f        当前目录文件名补全
ctrl + x ,ctrl + o        扩展名内置函数补全
  • vim相关文件
~/.vimrc         记录一些环境变量
~/viminfo        记录vim的操作 
  • 分屏打开多个文件
vim -o file1 file2         横向分屏
vim -O file1 file2         纵向分屏
  • 打开文件并跳转到指定行
vim file +n      n是数字,代表行数
  • 只读方式打开文件
vim -R file       只读方式打开文件,可以强制保存
vim -M file       只读方式打开文件,不可以强制保存
  • 恢复异常的文件
vim -r file     恢复异常的文件
  • 打开文件并且光标停留到第一个搜索到的字符串
vim +/string  file      打开文件并且光标停留到第一个搜索到的字符串string

异常处理

偶尔会发生一些异常情况,比如多人同时编辑一共文件,文件编辑后vim异常退出,都会导致留下一个.swp的文件,此时可以选择恢复或者删除。

使用向导

后来查资料才发现,vim有一个引导程序来介绍使用。

vimtutor

暂时先就此为止吧,再多用不到的知识也只是徒增烦恼哈

关联阅读

THE END
本站支持SSL安全访问