Linux常用的文本编辑工具有nano和vi,vim是vi的升级强化版本,支持的模式有三种:命令模式、输入模式、末行模式
打开文件
命令格式: vim [option] [file...]
选项
+#
: 打开文件并光标定位到第#行
+/PATTERN
: 打开文件,光标定位到第一次匹配到PATTERN的行
模式转换
- 编辑模式 -> 输入模式
i: 光标处转入输入模式
a: 光标后转入输入模式
o: 光标行下一行打开新行转入输入模式
I: 光标行首转入输入模式
A: 光标行尾转入数据模式
O: 光标所在行上一行打开新行转入数据模式
- 输入模式 -> 编辑模式
ESC键
- 编辑模式 -> 末行模式
:
- 末行模式 -> 编辑模式
ESC键
- 编辑模式->替换模式
r: 替换当前字符
R: 进入替换模式
- 编辑模式->可视模式
v: 按字符选定
V: 按行选定
关闭文件
-
在编辑模式下,
zz
保存并退出 -
在末行模式下:
q
退出,q!
强制退出,不保存;wq
或者x
保存退出;w /to/new/file
保存至一个新文件
光标跳转
- 字符间跳转
h或者左方向键: 左跳一个字符
j或者下方向键: 下跳一行
k或者上方向键: 上跳一行
l或者右方向键: 右跳转一个字符
#COMMAND
: 跳转#个字符
- 单词间跳转
w: 下一个单词词首
e: 当前或者下一个单词词尾
b: 当前或者上一个单词词首
#COMMAND
: 跳转#个单词
- 行首尾跳转
^: 跳转到行首第一个非空白字符位置
0: 跳转到行首
$: 跳转到行尾
- 行间跳转
#G
: 跳转到#行
G
: 跳转到最后一行
1G
或者gg
: 跳转到第一行
- 句间跳转
): 跳转到句首
(: 跳转到句末
- 段间跳转
{: 跳转到段首
}: 跳转到段末
翻屏
Commond+f: 向后翻一屏
Commond+b: 向前翻一屏
Commond+d: 向后翻半屏
Commond+u: 向前翻半屏
Enter: 向后翻1行
vim编辑命令
- 字符编辑
x
: 删除光标位置的字符
#x
: 删除光标位置到后面的#个字符
xp
: 交换光标位置和后面字符的位置
- 替换命令
r: 替换光标处的字符
- 删除命令
d: 删除光标所在的字符,可结合光标跳转实现范围删除
d$: 删除光标所在位置到行末的所有字符
d0: 删除光标所在位置到行首的所有字符
d^: 删除光标所有位置到行首第一个非空字符的所有字符
dw: 删除光标位置到下一个单词前的所有字符
de: 删除光标所在位置到当前单词或下一个单词末尾的所有字符
db: 删除光标所在位置到当前单词首上一个单词首所有字符
dd: 删除当前行
- 粘贴命令
p: 粘贴到当前光标后面,如果是一整行就会在当前光标所在行下面一整行
P: 粘贴到当前光标前面,如果是一整行就会在当前光标所在行上面一整行
- 复制命令
y: 复制命令,可以结合光标移动命令实现范围复制
y$: 复制光标所在位置到行末的所有字符
y0: 复制光标所在位置到行首的所有字符
y^: 复制光标所有位置到行首第一个非空字符的所有字符
yw: 复制光标位置到下一个单词前的所有字符
ye: 复制光标所在位置到当前单词或下一个单词末尾的所有字符
yb: 复制光标所在位置到当前单词首上一个单词首所有字符
#COMMAND
: #次操作
- 改变命令
c: 实现删除并进入输入模式
c$: 删除光标所在位置到行末的所有字符,并进入输入模式
c0: 删除光标所在位置到行首的所有字符,并进入输入模式
c^: 删除光标所有位置到行首第一个非空字符的所有字符,并进入输入模式
cw: 删除光标位置到下一个单词前的所有字符,并进入输入模式
ce: 删除光标所在位置到当前单词或下一个单词末尾的所有字符,并进入输入模式
cb: 删除光标所在位置到当前单词首上一个单词首所有字符,并进入输入模式
cd: 删除当前行,并进入输入模式
#COMMAND
: #次操作
- 撤销操作
u: 撤销操作
Ctrl+r: 重做
.: 重复上一次编辑
vimtutor 为自带的vim教程,使用
vimtutor
调出教程。
末行模式
- 位置界定
:start_post[,end_post]
#
: 特定第#行,如5,就是第5行
.
: 当前行
$
: 最后一行
#,#
: 指定一个范围内的所有行
#,+#
: 第#行到#+#行
%
: 全文
/PATTERN/
: 从光标位置到文件末尾第一次被模式匹配到的行
位置界定可以和命令一起使用实现编辑操作,例如
d
y
c
还可以将指定的内容保存到一个文件 w /path/to/file
或者将指定文件的内容插入到指定位置: r /path/from/file
- 查找
/PATTERN: 从光标向后查找
?PATTERN: 从光标位置向前查找
n N 分别表示沿搜索顺序和逆搜索顺序查找下一个匹配位置
- 替换
s: 末行模式替换命令
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可以使用正则表达式
替换为的内容:不能使用正则表达式,但可以使用引用分组
修饰符:i表示忽略大小写 g表示全局替换,默认只会替换一行中的第一个匹配位置
在有特殊字符是,可以使用特殊字符替换,例如s###
,s@@@
例如:%s@\<t[[:alpha:]]\+\>@&er@g
和%s#\<t\([[:alpha:]]\+\)\>#T\1#g
vim多文件功能
- 在文件间切换
:next 下一个
:prev 上一个
:first 第一个
:last 最后一个
- 退出所有文件
:wqall 保存并退出所有文件
:wall 保存所有文件
:qall 退出所有文件
- 多窗口vim选项
-o 水平分隔窗口
-O 垂直分隔窗口
Ctrl+w,方向键: 在多个窗口间切换
在vim内部,可以使用Ctrl+w,s,水平分割两个窗口查看同一个文件;使用Ctrl+w,v,垂直分隔窗口查看同一个文件。
vim定制
在末行模式中的设定只对当前vim进程有效,如果需要永久修改,需要修改/etc/vimrc或者~/.vimrc文件
-
行号:set number或者set nu, 取消显示行号set nonu或者set nomber
-
括号高亮匹配:set showmatch或者set sm,取消则使用set nosm
-
自动缩进:set ai,取消使用set noai
-
高亮搜索:set hlsearch,取消使用set nohlsearch
-
语法高亮:syntax on,取消使用syntax off
-
忽略大小写:set ic,取消使用set noic
-
获取帮助:
help
,或者使用help subject
获取具体小结帮助,例如help set