vi编辑器操作
程序员文章站
2022-07-08 10:52:31
vi的基本操作 如果只键入vi,没有文件名,也能进入vi,退出命令时输入文件名才能 被存入磁盘。 进入vi后,光标处于特定某行上,如果去掉“+”号后面数字,光标处于文件最末行 模式识别匹配,在命令中指定一个字符串,进入vi后,光标处于文件中第一个与指定模式串相匹配那行,所有匹配的字符串被高亮。 末行 ......
vi的基本操作
-
如果只键入vi,没有文件名,也能进入vi,退出命令时输入文件名才能 被存入磁盘。
-
vi +行号 文件名
进入vi后,光标处于特定某行上,如果去掉“+”号后面数字,光标处于文件最末行 -
vi +/模式字符串 文件名
模式识别匹配,在命令中指定一个字符串,进入vi后,光标处于文件中第一个与指定模式串相匹配那行,所有匹配的字符串被高亮。 -
:set nohlsearch
末行模式下,取消高亮显示 -
vi 需要打开文件的通配符
可以编辑多个文件,在vi命令中写入要操作的文件即可。例如:vi *.c
打开当前目录下所有c文件。- 文件之间切换
-
ctrl + 6
下一个文件 -
:bn
下一个文件 -
:bp
上一个文件
-
- 文件之间切换
-
vi +/main *.h *.c
打开程序的所有源文件,并且将显示位置定位在main函数 -
文本插入操作:
-
插入文本命令
-
i
将文本插入光标前 -
i
将文本插入当前行的行首
-
-
追加文本命令
-
a
将新文本追加到光标当前所在位置之后 -
a
将新文本追加到所在行行尾
-
-
空行插入命令
-
o
在光标所在行下一行插入一个空行,光标置于该行行首 -
o
在光标所在行上一行插入一个空行,光标置于该行行首
-
-
-
文本删除操作(命令模式下):
-
x
删除光标处的字符。在x之前加上一个数字n,则删除从光标所在位置开始向右的n 个字符 -
x
删除光标前面的字符。在x之前加上一个数字n,则删除从光标前面那个字符开始向 左的n个字符 -
dd
删除光标所在整行。在dd前加入一个数字n,删除当前行及其后n-1行的内容 -
d或d$
删除从光标所在处开始到行尾的内容 -
d0
删除从光标前一个字符开始到行首的内容 -
dw
删除一个单词。若光标在某词中间,从光标所在位置开始删至词尾。dw之前加上n,表示删除n个指定的单词 -
d(
删除到上一句开始的所有字符 -
d)
删除到下一句开始的所有字符 -
d{
删除到上一段开始的所有字符 -
d}
删除到下一段开始的所有字符 -
d<cr>
删除包括当前行在内的两行字符
-
-
文本复制操作:
-
yy
复制光标所在的整行。在yy前加一个数字n,可复制当前行及其后n-1行内容。 -
y或y$
复制从光标所在处到行尾的内容 -
yw
复制一个单词。若光标在某单词中间,则从光标所在位置开始复制到词尾。在yw前加一个数字n,表示复制n个指定的单词。 -
y)
复制到下一句开始的所有字符 -
y}
复制到下一段开始的所有字符 -
y<cr>
复制包括当前行在内的两行内容
-
-
文本粘贴命令:
-
p
粘贴当前缓冲区的内容
-
-
文本选择命令:
-
v
命令行下进行文本选择。起始处按v进入块选择模式,然后移动到块尾,之间部分被高亮显示 -
v
文本第一行按v,然后移动光标到块的最后一行。之间所有行被高亮显示
-
-
撤销命令:
-
u
撤销上一次所做的操作。多次使用u命令会一步一步依次撤销先前做过的操作 -
u
一次性撤销自上次移动到当前行所做过的所有操作,再使用一次u则撤销先前u命令所做的操作,恢复被撤销的内容
-
-
重复命令:
-
.
文本编辑时碰到机械地重复一些操作,可以让用户方便地再执行一次前面刚完成的某个复杂命令
-
-
推出vi操作:
:q
-
:q!
无论文件是否改变都会强行推出vi编辑器-
:w 新文件名
vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。使用命令时,可以再给当前编辑文件起一个新的文件名,相当于该文件另存为一个新的文件
-
-
:w!新文件名
命令与上面相同,不同的是,即使指定的新文件存在,编辑器也会用当前文件对其进行替换-
:wq
vi将先保存文件,然后退出vi返回shell
-
-
:x
若当前文件曾被修改过,则vi会保存该文件。否则vi直接退出,不保存该文件
vi增强操作
-
替换命令:
-
r
将当前光标所指的字符替换为提供的字符,可以在该命令前加上数字n,表示从当前字符开始的n个字符替换为提供的字符 -
r
让vim进入replace模式,此模式下,每个键入的字符都会替换当前光标字符,键入结束该模式
-
-
光标移动:
- 基本光标移动命令
-
h
向左移动一个字符 -
l
向右移动一个字符 -
j
向下移一行 -
k
向上移一行
-
- 按行移动光标
-
h
将光标移至当前屏幕的第一行,而不是整个文件的第一行。h命令之前加上数字n,则将光标移至第n行行首 -
m
该命令将光标移至屏幕显示文件的中间的行首。若屏幕已经充满,则移动到屏幕的中间行 -
l
光标移至屏幕显示文件的最底行的行首。l命令之前加上数字n,光标移至从屏幕底部算起第n行的行首 -
g
全文范围内移动光标,此时光标移动范围不再受屏幕的限制
-
- 按字移动光标
-
w和w
w
将光标右移至下一个字的字首。w
指两个空格之间的任何内容 -
e和e
e
如果光标起始位置处于字内,则光标移至本字字尾,如果光标在字尾,则移动到下一个字的字尾。e
所指的字是指两个空格之间的内容 -
b和b
b
如果光标处于字内,则将光标移至本字字首,如果处于字首,则将光标移至上一个字字首。
-
- 按句移动光标
-
(
将光标移至上一个句子的开头 -
)
将光标移至下一个句子的开头
-
- 按段移动光标(段是被定义以一个空白行开始和结束的片段)
-
{
将光标向前移至上一个段的开头 -
}
将光标向后移至下一个段的开头
-
- 文本行的移动
-
>
将指定的正文行向右移动,通常是右移8个空格。指定的数字是需要移动的行数目,并不是要右移的空格数。通常将代码整体右移,例>3 回车
-
<
效果与上述相同,方向相反 -
>>
将光标所在行右移8个空格。如果在>>
命令之前给出数字n,则表示光标当前行及其下面的n-1行都右移8个空格 -
<<
效果与上述相同,方向相反
-
- 文本的异行行动(末行模式)
-
m
允许用户将某一行的文本内容移动到指定位置,使用方法imj
,把第i行移至第j行下方
-
- 屏幕滚动
-
ctrl+u
将屏幕向前(文件头方向)翻滚半屏 -
ctal+d
将屏幕向后(文件尾方向)翻滚半屏 -
ctrl+f
将屏幕向文件尾方向翻滚一整屏 -
ctrl+b
将屏幕向文件首方向翻滚一整屏- 可以在命令之前加上一个数字n,表示屏幕向前或者向后翻滚n行,或者屏幕向前或者向后翻滚n页。
-
- 查找命令(末行模式)
-
/string
/命令从光标处开始向后寻找字符串string -
?string
?命令从光标处开始向后寻找字符串string -
n
重复上一条命令,继续向下检索 -
n
重复上一条检索命令,但检索方向和上一次相反 -
g/string
使光标停止在第一个检索到string串的首行
-
- 替换命令
-
:[range]/s/s1/s2/[option]
-
[range]
表示检索范围,省略时表示当前行-
“1,10”
表示第1行到第10行 -
“%”
表示整个文件 -
“.,$”
从当前行到文件尾
-
-
s
为替换命令。s1
是要被替换的串,s2
为替换的串 -
[option]
/g
表示在全局文件中进行替换,/c
表示在每次替换之前需要用户进行确认,省略时仅对每行第一个匹配串进行替换 -
\<word
替换以word开始的单词的word部分- 例如,
%s/\<int/char
表示以int开始的单词的int部分换成char
- 例如,
-
-
- 窗口的切分
-
:split 文件名
split也可以简写为sp。这时窗口切分为上下两半,下部分对应原来文件,上半部分对应新打开文件。 -
ctal+w,然后j
移动光标到下一个窗口 -
ctral+w,然后k
移动光标到上一个窗口 -
ctral+w,然后q
关闭当前窗口 -
ctral+w,然后w
移动光标到另一个窗口
-
- 设置环境
-
:set nu (nonu)
显示行号(或者不显示行号) -
:set hlsearch (nohlsearch)
设定搜寻字符串反白显示(或者不反白显示) -
:set autoindent
显示程序语法自动缩进 -
:set backup (nobackup)
自动存储备份文件(或者不自动备份文件) -
:set all
显示所有的选项 -
:syntax on (off)
实现程序语法高亮显示(或者不高亮显示) -
:set ignorecase (noignorecase)
忽略大小写(或者区分大小写)
-
- 基本光标移动命令