vim:(visual interface improved),是一款全屏的纯文本ASSCII的编辑器,是 vi 的增强版,相比较 vi 来说,vim支持语法高亮等特点。
vim是一种模式化的编辑器,常见的模式有编辑模式(命令模式),输入模式,末行模式,可视化模式,多文件模式,多窗口模式等。
Usage: vim [option]... [FILE]...
vim 选项+
vim + file 打开文件时光标处在最后一行的行首
vim +3 file 打开文件时光标处在第三行的行首
一、各个模式的介绍
编辑模式(命令模式):这个模式下键盘操作通常被理解为编辑命令
输入模式:此模式下用户可以输入文本内容
末行模式:vim内置命令行接口,执行vim内置变量
可视化模式:此模式下用户可以高亮选择文本的内容
多文件模式:此模式下用户一次可以打开多个文件
多窗口模式:此模式下在全屏下可显示多个窗口来编辑文件
二、各个模式之间的切换
模式切换类型 | 切换方法 | |
编辑模式 -> 输入模式 | i,a | 在光标所在处的前方,后方转换为输入模式 |
I,A | 在光标所在处的行首,行尾转换为输入模式 | |
o,O | 在光标所在行的上一行,下一行转换为输入模式 | |
输入模式 -> 编辑模式 | ESC |
|
编辑模式 -> 末行模式 | : | |
末行模式-->编辑模式 | ESC |
三、编辑模式(命令模式)下的文本操作
操作分类 | 具体方法及意义 | ||
光标移动 | 字符间移动 | j,k | j:向下移动光标 k:向下移动光标 |
h,l | h:向左移动光标 l:向右移动光标 | ||
#{h|j|k|l} | 3h:向左跳跃光标3个字符 4j:向下跳跃光标4行 | ||
单词间移动 | w | w:光标移动到下一个单词词尾 | |
e,b | e:光标跳跃到当前或下一个单词词尾 b:光标跳跃到当前或上一个单词词首 |
||
#{w|e|b} | 3w:光标跳跃到下3个单词的词尾 4b:光标跳跃到上3或4(光标恰好在词首)个单词的词首 |
||
行内移动 | 0,$ | 0:光标跳跃到绝对行首 $:光标跳跃到绝对行尾 |
|
^ | ^:光标跳跃到行首第一个非空白字符开头处 | ||
Ctrl+f Ctrl+b Ctrl+u Ctrl+d |
向文件尾部翻一屏 向文件首部翻一屏 向文件尾部翻半屏 向文件首部翻半屏 |
||
行间移动 | #G | 5G:将光标跳跃到第5行行首第一个非空白字符开头处 | |
G,gg | G:将光标跳跃到行尾第一个非空白字符开头处 gg:将光标跳跃到行首第一个非空白字符开头处 |
||
编辑命令 | x类 | x,#x | x:删除光标所在处的字符 4x:删除光标所在处以及之后的共4个字符 |
d类 | dd D #dd d#d | dd:删除光标所在处的一整行 D:同 d$ 一样,删除光标所在处行向后的所有内容 |
|
d结合w,e,b,^,$,0,G,gg一起使用 | dgg:删除光标处以及光标处到行首的所有内容 db:删除光标处到光标处前单词的单词首部的内容 |
||
y类 | yy,Y,y#y,#yy | yy Y:复制光标所在处的整行 y3y 3yy:复制光标所在处的及以下共3行 |
|
结合w,e,b,^,$,0,G,gg一起使用 | yw:复制光标所在处向后一个单词首部的的字符 y$:复制光标所在处向后这行所有的的字符 yG:复制光标所在处向后文件尾部行所有的的字符 |
||
p类 | p P | 行级别: p: 粘贴于当前行下方 P: 粘贴于当前行上方 小于行级别: p: 粘贴于当前光标所在处的后方 P:粘贴于当前光标所在处的前方 |
|
c类 | cc,#c | cc C:删除光标所在处的一整行,并进入输入模式 | |
结合w,e,b,^,$,0,G,gg一起使用 | cgg:删除光标所在处到文件行首的所有内容,并进入输入模式 c0:删除光标所在处到行首的所有内容,并进入输入模式 |
||
撤消编辑 | u,#u | u:撤销上一次操作 3u:撤销前3次操作 |
|
ctrl+r | 撤销上一次撤销操作 | ||
重复 | . | 重复上一条命令 |
四、末行模式
末行模式是执行一些vim的内置变量,以及问搜索、替换、删除等操作。在这里要引入内容定界。
内容定界的格式是:startpos,endpos。说明在末行模式下操作的范围。
内容定界符 | 具体意义 |
# |
#:第#行 3:表示第三行 |
. | .:表示当前行 |
$ | $:表示最后一行 |
% | %:表示全文 等价于 1,$ |
$-# .+# | 支持像$-2, .+2等内容定界 .+1,$-1 表示当前行的下一行至倒数第二行 |
下面介绍末行模式的的操作方法以及意义,这些操作都是结合内容定界符一起使用的。
种类 | 具体意义 |
c d y | :%y 复制整个文本内容 :.,30d 删除当前行道30行的内容 100c:删除100的内容,并变为输入模式,在100行的行首 |
w r | w /path/to/somefile: 将选定范围内的内容保存至某文件 r /path/from/somefile: 将指定的文件中的内容读取到指定位置中 `例如: :1,100w /tmp/test.txt 将1,100的内容保存到/tmp/test.txt文件中 :54r /etc/passwd 将/etc/passwd文件内容加入到54行的下面 |
s///gi | s/要查找内容的模式/要替换的字符串或者引用/gi 其中g: global, 全行替换 i: 不区分字符大小写 :%s@^[[:space:]]\{1,\}@@g 删除整个文本的空白行 |
/ ? | / ? 是命令行搜索,支持正则表达式 /pattern 向下搜索 ?pattern 向上搜索 N n 使用n,N上下查看 |
命令 | :set nu 显示行号 :set nonu 取消显示行号 :set ai 自动缩进 :set noai 取消自动缩进 :set ic 设置忽略大小写 :set noic 取消设置忽略大小写 :set sm 设置括号匹配 :set nosm 取消设置括号匹配 :syntax on|off 设置语法高亮 :set hlsearch 设置搜索高亮 :set nohlsearch 取消设置搜索高亮 |
五、可视化模式,多文件模式,多窗口模式
1)可视化
v:指的是国标所走过的字符
V:指的是国标所走过的行
例如:在某些连续的行首加入#号。编辑模式下:V-->选中行--->I--->#---->ESC就可完成此功能。
2)多文件模式
vi file1 file2 file3... 在末行模式下可以使用next,previous,last,first关键字打开下一个,上一个,最后一个,第一个文件。使用wqall可以保存全部文件。
3)多窗口模式
多文件模式:vim -o:水平分割窗口
-O:垂直分割窗口
单文件模式:
Ctrl+w, s: 水平分割
Ctrl+w, v: 垂直分割
六、配置文件
/etc/vimrc:全局的
~/.vimrc:用户模式下的配置文件
补充:
1.设置制表符宽度
:set tabstop=4
:set softtabstop=4
2.设置缩进的空格数
:set shiftwidth=4
3.每行的缩进值与上一行相等
:set autoindent
4.使用 C/C++ 语言的自动缩进方式
:set cindent
5.显示行号
:set nu
6.将搜索内容反白
:set hlsearch
7.可以删除任意值
:set backspace=2
本文侧重介绍的是vim文本编辑器的使用。