模式
vi有3个模式:插入模式、命令模式、低行模式。
- 插入模式:在此模式下可以输入字符,按ESC将回到命令模式。
- 命令模式:可以移动光标、删除字符等。
- 低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。
打开
vi filename
打开filename文件
:w
保存文件
:w vpser.net
保存至vpser.net文件
:q
退出编辑器,如果文件已修改请使用下面的命令
:q!
退出编辑器,且不保存
:wq
退出编辑器,且保存文件
移动
以字符为单位移动
h
向左移动一个字符;l
向右移动一个字符;k
向上移动一个字符;j
向下移动一个字符;
以普通word为单位移动
w
将光标向前移动一个word并停留在下一个word的首字符上,助记:word;b
将光标向后移动一个word并停留在下一个word的首字符上,助记:backward;e
将光标向前移动一个word并停留在下一个word的末字符上,助记:end of word;ge
将光标向后移动一个word并停留在下一个word的末字符上;
[备注]:
- 以空白作为word分隔时,以上命令为大写,
W
,B
,E
,GE
; - 以上命令都可以采取“数字+命令”的方式执行;
移动光标到行头或者行尾
$
将光标移动到当前行行尾,此命令与键盘上End
键作用相同;^
将光标移动到当前行的第一个非空白字符上;0
将光标移动到当前行的第一个字符上,此命令与键盘上Home
键作用相同;
[备注]:
$
命令接受计数器,其他两个不接受计数器;
移动光标到指定字符上
使用单字符搜索命令可以快速将光标移到当前行的某个字符上。
f
在当前行向右查找某个字符并将光标停留其上,助记:find;F
在当前行向左查找某个字符并将光标停留其上;t
在当前行向右查找某个字符并将光标停留于其前一个字符之上,助记:to;T
在当前行向左查找某个字符并将光标停留于其前一个字符之上;
[备注]:
- 这四个命令都可使用计数器;
- 这四个命令都可以用
;
和,
重复执行,不同之处在于,;
以与原命令相同的方向执行,,
恰好相反;
移动光标到匹配括号上
将光标跳转到与当前光标下的括号相匹配的括号上去:%;
移动光标到指定行上
G
跳至文件的底部gg
跳至文件的头部nG
跳到行号为n的行数字+%
使用百分比将光标移动到文档某个大致的位置:数字+%。此处百分比的计算是以行为单位,而不是以字节数为单位;H(home)
移动到第一行使用命令H(home),M(middle)
移动到中间行使用命令M(middle),L(last)
移动到最后一行使用命令;CTRL-G
可以显示当前位置信息;n+
向下跳n行n-
向上跳n行
滚屏
CTRL-U
使文本向下滚动半屏,相当于显示文本的窗口向上滚半屏,光标所处的行数随滚屏而改变;CTRL-D
使文本向上滚动半屏,相当于显示文本的窗口向下滚半屏,光标所处的行数随滚屏而改变;CTRL-E
使文本向上滚动一行,光标所处的行数不变;CTRL-Y
使文本向下滚动一行,光标所处的行数不变;CTRL-F
向前滚动一整屏,滚动后光标处于第一行;CTRL-B
向后滚动一整屏,滚动后光标处于最后一行;zz
把当前位置处于屏幕的正中央;zt
把当前位置处于屏幕的顶端,助记:top;zb
把当前位置处于屏幕的底端,助记:bottom;
插入
a
在当前光标位置的右边添加文本i
在当前光标位置的左边添加文本A
在当前行的末尾位置添加文本I
在当前行的开始处添加文本(非空字符的行首)O
在当前行的上面新建一行o
在当前行的下面新建一行R
替换(覆盖)当前光标位置及后面的若干文本J
合并光标所在行及下一行为一行(依然在命令模式)
删除
x
删除当前字符nx
删除从光标开始的n个字符dd
删除当前行ndd
向下删除当前行在内的n行u
撤销上一步操作U
撤销对当前行的所有操作
搜索
/vpser
向光标下搜索vpser字符串?vpser
向光标上搜索vpser字符串n
向下搜索前一个搜素动作N
向上搜索前一个搜索动作
复制
yy
将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。nyy
将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。yw
复制从光标开始到词尾的字符。nyw
复制从光标开始的n个单词。y^
复制从光标到行首的内容。y$
复制从光标到行尾的内容。p
粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。P
粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。
替换
:s/old/new
用new替换行中首次出现的old:s/old/new/g
用new替换行中所有的old:n,m s/old/new/g
用new替换从n到m行里所有的old:%s/old/new/g
用new替换当前文件里所有的old
配置
执行命令修改文件:
sudo vim /etc/vim/vimrc
在文件尾添加内容如下:
set nobackup " 无~后缀的备份文件
set autoindent shiftwidth=4 " 启用自动缩进,并设置自动缩进的宽度为4
set tabstop=4 " 让tab变成4个字符的宽度
set nu " 显示行号
set mouse=a " 鼠标定位
filetype on " 检测文件的类型
syntax on " 语法高亮度显示
set autoindent " 把当前行的对起格式应用到下一行
set smartindent " 智能的选择对起方式
set showmatch " 设置匹配模式
set ruler " 在右下角显示光标位置的状态行
set incsearch " 查找提示