一:vi/vim编辑器介绍
vi是 visual interface 的简称,是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑 ,类似于Windows中的记事本。Vim是vi的加强版本,兼容所有vi的命令,不仅能编辑文本,还具有shell程序的编辑功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。
安装Vim
yum -y -install vim
1.1工作模式
基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是普通模式常用的几个命令:
- i -- 切换到输入模式,在光标当前位置开始输入文本。
- x -- 删除当前光标所在处的字符。
- : -- 切换到底线命令模式,以在最底一行输入命令。
- a -- 进入插入模式,在光标下一个位置开始输入文本。
- o:在当前行的下方插入一个新行,并进入插入模式。
- O -- 在当前行的上方插入一个新行,并进入插入模式。
- dd -- 剪切当前行。
- yy -- 复制当前行。
- p(小写) -- 粘贴剪贴板内容到光标下方。
- P(大写)-- 粘贴剪贴板内容到光标上方。
- u -- 撤销上一次操作。
- Ctrl + r -- 重做上一次撤销的操作。
- :w -- 保存文件。
- :q -- 退出 Vim 编辑器。
- :q! -- 强制退出Vim 编辑器,不保存修改。
若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。
命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。
输入模式
在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。
在输入模式中,可以使用以下按键:
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下 :(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
:w
:保存文件。:q
:退出 Vim 编辑器。:wq
:保存文件并退出 Vim 编辑器。:q!
:强制退出Vim编辑器,不保存修改。
按 ESC 键可随时退出底线命令模式。
命令模式相当于一个中转站,即无论当前处于何种模式,都可通过按 Esc 键进入命令模式中,再根据所需继续完成后续操作。
简单的说,我们可以将这三个模式想成底下的图标来表示:
1.2编辑文件
命令格式
vi 文件路径
vim 文件路径
如果文件路径表示不存在,那么此命令用于编辑新文件
如果文件路径表示存在,那么此命令用于编辑已有文件
1.3保存和退出
q quit的缩写
底行命令 | 作用 |
:w | 保存(只是对当前文件的一个保存,并未退出文件) |
:q | 退出,注意:要先保存然后才能退出 |
:wq | 保存并退出 |
:q! | 强制退出 (此时文件还未保存) |
已有文件
一般情况下 ,编辑完文件后,使用:wq命令保存并退出
新文件:
如果已有文件名,在末行模式直接输入w保存,如果没文件名,输入w文件名 进行保存
另存为:
那么在vi中也可以另存为,也就是在保存之后,再使用w 另存文件名。
1.4 光标的移动
光标方向的移动,除了可以使用方向键,还可以使用以下命令 :
向上移动光标:k
向左移动光标:h
向右移动光标:l
向下移动光标:j
1.5 翻页命令kk
Ctrl+F向前翻整页
Ctrl+B向后翻整页
Ctrl+U向前翻半页
Ctrl+D向后翻半页
1.6 行内快数跳转
^移动到本行行首
$移动到本行行尾
1.7 显示行号和取消行号(底行模式使用)
set nu显示行号
set nonu取消行号
1.8 在命令模式下,使用以下命令可以快速的在行间跳转
gg跳转到文件首行
G跳转到尾行
G跳转到文件的#行
二:编辑操作
2.1:进入输入模式命令
- i 插入命令:
- 当你在普通模式(Normal Mode)下时,按下
i
键会进入插入模式(Insert Mode),允许你在光标所在位置开始插入文本。
- 当你在普通模式(Normal Mode)下时,按下
- a 附加命令:
- 与
i
命令类似,但a
命令会在光标当前位置的下一个字符处开始插入文本。如果光标位于行尾,则会在下一行开始插入。
- 与
- o 打开命令:
- 在普通模式下,
o
命令会在光标所在行的下一行创建一个新行,并将光标置于新行的开始位置,进入插入模式。
- 在普通模式下,
- c 修改命令:
c
命令用于删除文本并进入插入模式,允许你替换掉被删除的文本。你可以通过先指定一个范围(如cw
删除一个单词,c$
删除到行尾),然后按下c
来实现。
- r 取代命令:
- 在普通模式下,
r
命令允许你替换光标所在位置的单个字符。按下r
后,输入你想要替换成的字符即可。
- 在普通模式下,
- s 替换命令:
s
命令与cl
(change letter)命令相同,用于删除光标所在位置的字符并进入插入模式,允许你替换掉该字符。与c
命令不同,s
仅作用于光标所在位置的单个字符。
- Esc 退出命令:
- 在插入模式或可视模式下,按下
Esc
键会退出当前模式,返回到普通模式。在普通模式下,你可以使用各种命令来移动光标、搜索文本、复制粘贴等。
- 在插入模式或可视模式下,按下
2.2:输入模式的操作
- Home 光标到行首:
- 按下
Home
键会将光标移动到当前行的开头。 - 在Vim中,没有直接的
Home
键映射,但你可以使用0
(数字零)键来达到相同的效果,即将光标移动到当前行的第一个非空白字符上。如果你想要移动到包括空格和制表符在内的行首,可以使用^
键。
- 按下
- End 光标到行尾:
- 按下
End
键会将光标移动到当前行的末尾。 - 在Vim中,你可以使用
$
键来达到这个效果,即将光标移动到当前行的最后一个字符上。
- 按下
- Page Up和Page Down上下翻页:
Page Up
和Page Down
键用于向上或向下翻页。- 在Vim中,这些键也通常保留其原始功能,即
Page Up
向上翻页,Page Down
向下翻页。但是,Vim也提供了其他导航命令,如Ctrl + b
向上翻页(backward),Ctrl + f
向下翻页(forward)。
- Delete删除光标位置的字符:
Delete
键(或标记为Del
的键)用于删除光标所在位置的字符。- 在Vim的普通模式下,
x
命令用于删除光标所在位置的字符。如果你处于插入模式并希望删除字符,你需要先按Esc
退出插入模式,然后使用x
命令。不过,如果你已经习惯了其他编辑器的行为,并希望Vim在插入模式下也能通过Delete
键删除字符,那么你可能需要查看你的Vim配置或系统设置,因为Vim本身并不直接拦截Delete
键的默认行为。
2.3:删除操作(命令模式使用)
x
删除光标处的单个字符:- 在Vim的普通模式下,
x
命令会删除光标所在位置的单个字符。如果想要连续删除多个字符,可以在按下x
之前输入一个数字,比如3x
,这会删除光标右侧的三个字符。
- 在Vim的普通模式下,
dd
删除光标所在行:- 同样在Vim的普通模式下,
dd
命令会删除光标所在的整行,并将该行保存在Vim的剪贴板中(也称为寄存器)。如果想要连续删除多行,可以在按下dd
之前输入一个数字,比如3dd
,这会从当前行开始向下删除三行文本。
- 同样在Vim的普通模式下,
dw
删除当前字符到单词尾包括空格的所有字符:dw
命令在Vim中用于删除从光标当前位置到当前单词末尾的所有字符,包括单词后面的空格(如果有的话)。Vim中的“单词”定义可能因配置而异,但通常包括字母、数字和下划线。请注意,如果光标已经在单词的末尾,dw
将不会删除任何内容,除非光标后面紧跟一个空格或标点符号,并且Vim的配置将其视为单词的一部分。
x
例如3x
删除光标处向右的三个字符:- 如前所述,
x
命令删除光标处的单个字符。通过在x
之前输入一个数字(在这个例子中是3
),可以指示Vim连续执行该命令指定的次数。因此,3x
会删除光标右侧的三个字符。
- 如前所述,
dd
例如3dd
从当前行开始向下删除三行文本:- 同样地,
dd
命令删除光标所在的整行。通过在dd
之前输入一个数字(在这个例子中是3
),可以指示Vim连续执行该命令指定的次数。因此,3dd
会从当前行开始向下删除三行文本。
- 同样地,
2.4:撤销操作
u命令
- 功能:撤销最近一次的操作。
- 使用方法:在Vim的普通模式下(即非插入模式),按下
u
键即可撤销最近一次对文本的修改。如果需要撤销多次操作,可以连续按下u
键,Vim会依次撤销之前的每一次修改。 - 注意事项:
u
命令只能撤销对文本的修改,无法撤销文件的保存、退出等操作。此外,撤销操作的范围受限于上一次保存文件时的状态。
U命令
- 功能:撤销对当前行的所有修改。
- 使用方法:在Vim的普通模式下,按下大写的
U
键将撤销对当前行的所有编辑操作,将该行恢复到上一次对该行进行编辑之前的状态。 - 注意事项:
U
命令与u
命令不同,它作用于整行而非单个操作。此外,如果再次使用U
命令,它会撤销之前U
命令的撤销操作,即恢复到U
命令之前的状态。
Ctrl+R命令
- 功能:恢复对使用
u
命令撤销的操作。 - 使用方法:在Vim的普通模式下,按下
Ctrl+R
组合键可以恢复最近一次使用u
命令撤销的修改。如果需要恢复多次撤销操作,可以连续按下Ctrl+R
键。 - 注意事项:
Ctrl+R
命令是对u
命令的“撤销”操作,它允许用户恢复之前被撤销的修改。但是,如果在此期间进行了其他编辑操作或保存了文件,则恢复操作的范围可能会受到限制。
2.5:复制操作
yy
命令:- 功能:复制当前整行的内容到Vim的寄存器(剪贴板)。
- 使用方法:在Vim的普通模式下,将光标置于想要复制的行的任意位置,然后按下
yy
。 - 示例:
5yy
会连续复制从当前行开始的5行文本到寄存器。
yw
命令:- 功能:复制从当前光标所在位置到单词尾(包括单词尾部的空格,如果光标不在单词的开头)的内容到Vim的寄存器。
- 使用方法:在Vim的普通模式下,将光标置于单词的任意位置,然后按下
yw
。 - 示例:
2yw
会复制光标所在位置及其后面的两个单词(或单词的一部分,取决于光标位置和单词的边界)到寄存器。但请注意,这实际上是按单词数计算的,而不是精确地按“两个单词”这个量词,因为单词的边界由空格、标点符号等决定。
y$
命令:- 功能:复制从光标所在位置到行尾的内容到Vim的寄存器。
- 使用方法:在Vim的普通模式下,将光标置于行内的任意位置,然后按下
y$
。
- y^ 命令(注意:这里可能是
y0
的误写,因为^
在Vim中通常用于表示行的第一个非空白字符,但复制整个行首到光标位置并不直接使用^
):- 功能(基于
y0
的假设):复制从光标所在行的行首(第一个字符)到光标位置的内容到Vim的寄存器。但通常,如果我们想要复制行首到光标的内容,实际上可能会使用y0
(复制到行首的第一个非空白字符)或y^
(在某些配置或版本中可能表示相同的行为,但并非所有Vim实现都如此)。然而,更直接地复制整行或特定范围的文本到光标位置并不直接使用y^
。 - 注意:如果您确实想要复制从行首到光标的内容,并且包括空白字符,可能需要考虑使用Visual模式(
v
进入,选择文本,y
复制)或精确的命令组合。
- 功能(基于
- 在末行模式中使用范围进行复制:
- 功能:复制指定范围内的文本到Vim的寄存器。
- 使用方法:在Vim的命令模式下(通常通过按
:
进入),输入复制命令和范围。例如,3,5y
会复制第3行到第5行(包括第3行和第5行)的内容到寄存器。 - 注意:在命令模式下输入范围时,不要包含空格(即
3,5y
而不是3, 5y
)。
2.6:替换和搜索
在vim/gvim的命令模式,按“/”或者“?”后面跟所要搜索的内容,然后按回车开启搜索:
/str
?str
进入搜索模式后,按“n”表示寻找下一个,按“N”(shift + n)表示寻找上一个。
2.6.1:模糊搜索
/\<world\>
2.6.2:忽略大小写的搜索
缺省条件下vim的搜索是case-sensitive(大小敏感的) ,可以用属性“\c”来告诉vim在搜索时忽略大小写、
/\<pattern\>\c
/ll\c
2.6.3:高亮搜索结果
:set hlsearch
:set nohlsearch
2.6.4:替换
单个字符替换
r
:按下r
后,Vim 会等待您输入一个字符来替换光标当前所在位置的字符。输入完字符后,Vim 会自动回到普通模式。
替换模式
R
:进入替换模式(Replace mode),此时您输入的任何字符都会替换光标所在位置的字符,并将光标移动到下一个位置继续等待替换,直到您按下ESC
键退出替换模式。
恢复上一次操作
u
:撤销(Undo)最近一次的操作。连续按下u
可以撤销多次操作
查找与替换
在 Vim 中,可以使用 :s
命令来在当前行中查找并替换文本,或者使用 :%s
命令来在整个文件中查找并替换文本。
当前行替换
:s/原字符/新字符/g
:这个命令会在当前行中查找所有“原字符”的实例,并将它们替换为“新字符”。g
标志表示全局替换(即替换行中的所有匹配项)。
全局替换
:%s/原字符/新字符/g
:这个命令会在整个文件中查找所有“原字符”的实例,并将它们替换为“新字符”。同样,g
标志表示全局替换。
示例
假设想在整个文件中将所有的 "ll" 替换为 "xx",可以使用以下命令:
:%s/ll/xx/g
2.7:异常退出恢复文件
-
在使用Vim编辑器时,如果因为系统崩溃、程序异常或用户非正常退出等原因导致编辑的文件未能保存,Vim会生成一个以
.swp
为后缀的临时交换文件(swap file),这个文件包含了缓冲区中的未保存数据,可以用来恢复编辑的内容。以下是异常退出后恢复文件的步骤和注意事项:
恢复文件的步骤
-
检查
.swp
文件:
当尝试重新打开之前未正常关闭的文件时,Vim会检测到与该文件关联的.swp
文件,并给出警告。 -
使用Vim的恢复模式:
要恢复文件,可以使用Vim的恢复模式(recovery mode)。在命令行中,使用-r
参数加上文件名来启动Vim,例如:vim -r filename
-
这将以恢复模式打开Vim,并加载
.swp
文件中的内容。 -
检查和保存恢复的内容:
在恢复模式下,Vim会显示恢复的文件内容。你可以检查这些内容,确保它们是你想要恢复的。如果需要,可以将恢复的内容保存到一个新文件中(建议使用不同的文件名以避免覆盖原始文件),例如::w newfilename
然后退出Vim:
:q
-
比较和合并文件:
如果需要将恢复的内容合并回原始文件,可以使用diff
工具或其他文本比较工具来比较原始文件和恢复的文件,然后手动合并更改。 -
删除
.swp
文件:
在成功恢复并保存了所需的内容后,应该删除原始的.swp
文件,以避免混淆或不必要的磁盘空间占用。可以使用命令行中的rm
命令来删除它,例如:rm .filename.swp
注意事项
-
确保没有其他Vim实例正在编辑该文件:
在删除.swp
文件之前,确保没有其他Vim实例正在编辑该文件,否则可能会导致数据丢失。 -
定期保存文件:
为了避免因异常退出而丢失数据,建议定期保存文件。在Vim中,可以使用:w
命令来保存文件,或者使用:wq
命令来保存并退出。 -
配置Vim以自动处理
.swp
文件:
可以在Vim的配置文件.vimrc
中设置一些选项来自动处理.swp
文件。例如,可以设置Vim在退出时自动删除无用的.swp
文件,但这可能会关闭Vim的备份和交换文件功能,通常并不推荐这样做。 -
理解
.swp
文件的生成机制:.swp
文件是Vim在编辑文件时自动生成的,用于在异常情况下恢复未保存的数据。了解这一机制有助于更好地管理和恢复文件。