vi/vim命令有很多,其实只有少数的用法对于我们日常工作中起到了很大帮助,但是既然我选择梳理Linux的学习笔记,那么一定全力把自己的理解和学习笔记的内容认真整理汇总,内容或许有错误,还请发现的C友们发现了及时指出。
最近工作繁忙,断更了几天,今天的内容先整理一部分,希望对大家有帮助!
目录
?
vi(Visual Editor)是由Bill Joy于1976年创建的文本编辑器,Bill Joy是伯克利加州大学的一位计算机科学家,也是 BSD 操作系统的共同开发者之一。当时的 Unix 系统上并没有像 vi
这样的全屏幕编辑器,而只有基于行编辑的编辑器。为了提高编辑效率和用户体验,Bill Joy开发了 vi
这个全屏幕编辑器。
vi
最初是为了更好地编辑原始的 C 语言代码而设计的,但它很快就被广泛应用于各种编程语言的编辑和其他文本处理任务中。vi
的设计理念是使用键盘命令来控制文本编辑操作,而不需要依赖鼠标。
随着时间的推移,vi
发展出多个变种和改进版本,其中最著名的是 vim
(Vi Improved)。vim(Vi IMproved)是vi的改进版本,由Bram Moolenaar于1991年创建。vim保留了vi的许多特性和命令,同时增加了许多新功能和增强,使其成为一款更强大和可定制的文本编辑器。vim支持语法高亮、代码折叠、多窗口编辑、宏录制、插件等功能,以及对多种操作系统的支持。
学习使用 vi
或其改进版本 vim
(Vi Improved)有以下几个原因:
跨平台性:vi
和 vim
都是在不同的操作系统上广泛使用的文本编辑器,例如 Unix、Linux 和 macOS。无论在哪个平台上工作,都可以依赖于 vi/vim
的存在。
强大的功能和灵活性:一个功能丰富的文本编辑器,支持各种高级特性,如宏录制、自动补全、语法高亮等。它允许使用者迅速编辑和处理大型文件,执行全局替换、正则表达式搜索、多文件编辑等任务。学习使用vi/vim可以提高编辑效率,并能够处理各种文本编辑需求。它还允许用户自定义配置,使其能够满足个人偏好和需求。
命令行编辑:vi/vim
是基于命令行的编辑器,这意味着可以通过键盘命令来实现编辑操作,而无需依赖鼠标。这对于远程连接到服务器或在纯文本环境中工作的情况非常有用。
学会一种普遍编辑器:作为一种通用的文本编辑器,掌握 vi/vim
将能够适应各种环境和工作流程。许多终端工具和开发环境都提供了 vi/vim
的集成或模拟,因此学习它可以提高效率和适应能力。
成为更好的程序员:vi/vim
在编程领域得到广泛应用。学习并熟练使用 vi/vim
可以提高编码速度和效率,并能够更好地理解和修改代码。
终端环境下的编辑:在服务器和终端环境中,可能无法使用图形界面的文本编辑器。学习vi/vim能够在纯文本终端中进行编辑,无论是在本地终端还是通过SSH连接到远程服务器,都能够进行文本编辑和修改配置文件等操作。
vi
是一款流行的文本编辑器,它是 Unix 和类 Unix 系统中广泛使用的默认编辑器之一。名称 "vi" 代表 "Visual Editor"(可视化编辑器),它最初在 1976 年由 Bill Joy 开发。vi提供一个全屏幕的编辑环境,通过键盘命令来控制文本编辑操作,而无需依赖鼠标。这种设计理念使得 vi 可以在低分辨率终端上运行,并且适用于远程连接到服务器或在纯文本环境中工作的情况。?
随着时间的推移,vi
发展出多个变种和改进版本,其中最著名的是 vim
(Vi Improved)。vim
是 Bram Moolenaar 在 1991 年创建的,它保留了 vi
的许多特性,并在此基础上引入了更多的功能和选项,成为一个高度可定制的编辑器。
vi/vim的设计目标是提供一种高效和可定制的文本编辑环境,适用于终端和远程服务器等各种场景。它们的设计理念强调快速的键盘操作和命令式的编辑方式,使用户能够快速进行文本编辑和操作。
vi编辑器有三种工作模式,它们是:命令模式(Command mode)、插入模式(Insert mode)和底行模式(Ex mode)。
启动vi时的默认模式。在命令模式下,按键输入会被解释为命令,而不是插入文本。可以执行各种编辑命令、移动光标、复制粘贴等操作。
在命令模式下按下 “i” 键进入插入模式。在插入模式下,按键输入会被解释为要插入到文本中的内容,可以自由编辑文本。
在命令模式下按下 “:” 键进入末行模式。末行模式用于执行一些高级操作,如保存文件、退出编辑器、搜索替换文本等。
以下是vi命令的工作模式简图:
+---------------------------------------------------------------------------+
| vi |
| |
| +----------------------+ +---------------------------+ |
| | | | | |
| | | | | |
| | 命令模式 | | 插入模式 | |
| | | | | |
| | | | | |
| +----------+----------- -----------+------------------+ |
| | | |
| | | |
| |ESC |i |
| | | |
| v v |
| |
| +---------------------------------+ |
| | | |
| | 底行模式 | |
| | | |
| +----------------------------------+ |
| |
+---------------------------------------------------------------------------+
要启动 vi
编辑器,可以在终端或命令行界面中输入以下命令:
vi
打开一个新的 vi
窗口,并进入 vi
的默认模式,也就是命令模式(Command mode)。在该模式下,可以使用各种命令来编辑文本。 如图所示:
该图是?vim
编辑器的欢迎界面,它显示了以下信息:
vim
?编辑器,它是?vi
?的增强版,提供了更多的功能和选项。vim
?的版本号,这里是 7.4.629。不同版本的?vim
?可能会有略微不同的特性和改进。vim
?的主要作者是 Bram Moolenaar,还有其他贡献者也参与了?vim
?的开发。vim
?经过了一些修改和定制,来自于 Red Hat 公司的 Bugzilla 团队。vim
?是开源软件,可以自由地分发和使用。:help iccf<Enter>
来获取相关信息。:q<Enter>
?来退出?vim
?编辑器。:help<Enter>
?或按下?<F1>
?键来获取在线帮助。:help version7<Enter>
?来获取关于版本的详细信息。?如果想直接打开一个文件并开始编辑,可以在 vi
命令后面加上待编辑的文件名。例如,要打开名为 myfile.txt
的文件,可以使用如下命令:
vi myfile.txt
当输入以上命令后,vi
将会加载 myfile.txt
文件并显示其内容。然后,我们可以进行编辑操作。比如打开 users.txt文件:
vi users.txt
user1::1001:1001:User One:/home/user1:/bin/bash
user2::1002:1002:User Two:/home/user2:/bin/bash
结果如图:
?
注释:
vi
?/vim编辑器有三种主要的编辑模式,它们是:
命令模式(Command Mode): 这是 vi
的默认模式,也是你打开文件后进入的模式。在命令模式下,你可以执行各种功能命令,如光标移动、删除、复制、粘贴等。你可以使用单个字符的命令或组合键来操作文本。
插入模式(Insert Mode): 在命令模式下,按下小写字母 i
、a
、o
或其他命令切换到插入模式。在插入模式下,你可以直接输入文本内容,并即时修改文件。按下 Esc
键返回到命令模式。
可视模式(Visual Mode): 在命令模式下,按下大写字母 V
或其他命令切换到可视模式。可视模式允许你通过移动光标来选择一定范围的文本,以便进行复制、删除或其他操作。同样,按下 Esc
键返回到命令模式。
除了这些主要的编辑模式之外,还有一些其他的子模式和扩展模式,如替换模式(Replace Mode)、命令行模式(Command-line Mode)等。这些模式可以根据不同的需求和编辑任务进行切换,使得 vi
编辑器非常灵活和功能丰富。
以上面的users.txt文件为例,按下 i 进入输入模式(也称为编辑模式),开始编辑文字,显示如下图标志即表示已进入:
其实有很多命令都能进入编辑模式,以下是一部分的命令介绍,下面的小章节会进行详细划分:?
这是进入文件时的图面,我们用以下命令分别向文件插入 123456:
Esc
?键。比如将字符替换为M,底行会显示--REPLACE-- 完成结果如下图:在 vi
的命令模式下,可以使用以下移动命令来在文本中移动光标:
这些基本的光标移动命令可以让我们在文本中进行逐字符或逐行的导航。?
科普:为什么 h,j,k和 l 按键被用来移动光标呢?因为在开发 vi 之初,并不是所有的视频终端都有箭头按键,最初是在键盘没有方向键的设备上开发的, 熟练的打字员可以使用组合键来移动光标,他们的手指从不需要移开键盘。其次是h
、j
、k
和l
键位于大多数标准键盘布局的中心位置附近,方便用户使用右手来控制光标的移动。
除了单个字符和行之间的移动,vi
还提供了更灵活的移动命令,同样以users.txt文件为例,再插入两行文本:
This is an example.
This_is_an_example.
记得执行命令:wq 保存退出。
以下是其他一些移动命令的介绍,大家可以进行实践练习并熟悉用法,下面就不再一 一展示:
1)w:向前移动到下一个单词的开头。
2)W:W
命令用于向前移动到下一个以空格分隔的单词的开头。相比于小写字母 w
命令,W
命令会忽略标点符号和其他非空白字符。
以下是使用 W
命令的示例:
W
?后,光标将移动到单词 "is" 的开头。W
?后,光标将移动到单词 "is" 的开头,而不包括下划线。
注意:
W
命令只考虑以空格分隔的单词,对于其他类型的分隔符(例如逗号、点号等),它们被视为单词的一部分。如果想要跳过所有的分隔符并移动到下一个单词的开头,可以使用w
命令。?
3)b:向后移动到前一个单词的开头。
4)B:B
命令用于向后移动到前一个以空格分隔的单词的开头。与小写字母 b
命令不同,B
命令会忽略标点符号和其他非空白字符。
以下是使用 B
命令的示例:
B
?后,光标将移动到单词 "is" 的开头。B
?后,光标将移动到单词 "is" 的开头。
注意:
B
命令只考虑以空格分隔的单词,对于其他类型的分隔符(例如逗号、点号等),它们被视为单词的一部分。如果想要跳过所有的分隔符并移动到前一个单词的开头,可以使用b
命令。?
5)e:向前移动到当前或下一个单词的末尾。
6)0(数字零):移动到当前行的行首。
7)^:移动到当前行第一个非空白字符的位置。
8)$:移动到当前行的行尾。
9)numberG:这个组合键的作用是跳转到指定的行号。需要将 number
替换为目标行号,然后按下 G
键。例如,要跳转到文件的第 10 行,可以输入 10G
。
10)G:当没有指定数字时,单独使用 G
命令会将光标定位到文件的最后一行。
11)Ctrl-f?或?Page Down:向下滚动一页(相当于按下 Page Down 键)。
12)Ctrl-b?或?Page Up:向上滚动一页(相当于按下 Page Up 键)。
注意:
11)和12)组合键在不同的终端和操作系统中可能会有所差异。一些终端模拟器可能需要使用 Fn 键组合来模拟 Page Up 和 Page Down 键。
在某些情况下,也可以使用其他移动命令来实现类似的效果,例如
Ctrl-d
(向下滚动半页)和Ctrl-u
(向上滚动半页)
上面的这些命令可帮助我们更快地定位和浏览文本中的特定位置。?
在 vi
的命令模式下,可以使用以下命令来进行文本追加:
使用 a
命令: 在光标所在位置的后面追加文本,按下小写字母 a
进入插入模式。此时,可以输入要添加的文本,并在完成后按下 Esc
键返回到命令模式。
使用 A
命令: 在当前行的行尾追加文本,按下大写字母 A
进入插入模式。此时,光标会自动移动到当前行的末尾,可以开始键入要追加的文本。完成后,按下 Esc
键返回到命令模式。
使用 o
命令: 在当前行的下方追加新行,并进入插入模式。按下小写字母 o
,会在当前行的下方插入一个新行,并将光标置于新行的开头,以便添加新的文本。
使用 O
命令: 在当前行的上方追加新行,并进入插入模式。按下大写字母 O
,会在当前行的上方插入一个新行,光标将位于新行的开头,使你能够添加新的文本。
这些命令可让我们在 vi/vim
编辑器中灵活地进行文本追加操作。根据追加的位置和需求选择合适的命令即可。其中,o和O是我们常用来打开(新建)新的一行的使用方法。记住,在完成文本追加后,按下 Esc
键返回到命令模式。
在 vi
或 vim
编辑器中,可以使用以下命令来删除文本:
x 命令: 在命令模式下,将光标放在你想要删除的字符上,按下小写字母 x
。这将删除当前光标所在位置的单个字符。
dw 命令: 在命令模式下,将光标放在你想要删除的单词上,按下 dw
。这将删除从光标所在位置到单词末尾的所有字符,包括空格分隔符。
dd 命令: 在命令模式下,将光标放在你想要删除的行上,按下 dd
。这将删除整行文本。
#dd命令:在命令模式下,将光标移动到你想要删除的行上。输入数字?#
,代表你要删除的行数。例如,如果想删除当前行和下面的两行,就输入?3
。常用于删除指定行数的文本。
D 命令: 在命令模式下,将光标放在你想要删除的行内某个位置上,按下大写字母 D
。这将删除从光标位置到行尾的所有字符。
:n1,n2d 命令: 在命令模式下,输入 :n1,n2d
,其中 n1
和 n2
是要删除的行号范围。这将删除指定行号范围内的所有行。
Visual 模式: 进入可视模式(按下大写字母 V
)后,通过移动光标选择要删除的文本块。然后按下 d
命令来删除选中的文本。
在 vi
或 vim
编辑器中,剪切(cut)操作可以通过结合可视模式和删除命令来实现。以下是一些常用的方法:
使用可视模式进行剪切:
V
?键。d
?命令来删除选定的文本块。这样,所选文本将被删除并存储在剪贴板中,可以粘贴到其他位置。
使用 x
和剪贴板命令进行剪切:
x
?来删除当前光标所在位置的单个字符,并将其存储在剪贴板中。x
?键直到删除所需的文本。p
?来粘贴。这些方法可以让你在 vi
或 vim
中剪切文本。记住,剪切的文本会被存储在剪贴板中,可以在之后的粘贴操作中使用。如果需要将文本剪切到其他文件中,则可以在两个文件之间使用 :e
命令打开目标文件,并在其中执行粘贴操作。
附加注释--x/X字符用法:
在 vi
或 vim
编辑器中,字符 x
用于删除当前光标所在位置的单个字符。
x
?键,这将删除当前光标所在位置的字符。需要注意以下几点:?
- 如果你按下?
x
?后立即后悔了,可以按下?u
?命令来撤销删除操作,恢复被删除的字符。- 连续按下多次?
x
?将删除连续的字符,每次按下?x
?都会删除光标后面的一个字符。- 如果要删除光标前面的字符,可以使用大写字母?
X
?键。它与?x
?效果相同,只是方向相反。大写的X,每按一次,删除光标所在位置的"前面"一个字符。
除外,还有「#x」和「#X」,例如:
「6x」表示删除光标所在位置的"后面"6个字符。?
「20X」表示删除光标所在位置的"前面"20个字符。
那么3x
?就表示连续按下 x
键三次。每次按下 x
键会删除当前光标所在位置的一个字符。因此,使用 3x
命令将删除光标后面的三个字符。例如,假设我们有以下文本:
Hello, World!
如果光标位于字符 o
上,并执行 3x
命令,则文本将变为:
Hellrld!
?第一个 x
删除了 o
,第二个 x
删除了 ,
,第三个 x
删除了空格。
在 vi
或 vim
编辑器中,复制(copy)操作可以通过结合可视模式和复制命令来实现。以下是一些常用的方法:
使用可视模式进行复制:
v
?键。y
?命令来复制选定的文本块。这样,所选文本将被复制到剪贴板中,可以粘贴到其他位置。
使用 yy
和剪贴板命令进行复制:
yy
?命令来复制当前行。yy
?键直到复制所需的文本。p
?来粘贴。这些方法可以在 vi
或 vim
中复制文本。记住,复制的文本会被存储在剪贴板中,并可以在之后的粘贴操作中使用。如果需要将文本复制到其他文件中,则可以在两个文件之间使用 :e
命令打开目标文件,并在其中执行粘贴操作。
附加注释y字符用法:
命令 | 含义 |
yy | 当前行。 |
5yy? ? | ?当前行及随后的四行文本。 |
yW
| 从当前光标位置到下一个单词的开头。 |
y$
|
从当前光标位置到当前行的末尾。
|
y0
|
从当前光标位置到行首。
|
y^
|
从当前光标位置到文本行的第一个非空字符。
|
yG
|
从当前行到文件末尾。
|
y20G
|
从当前行到文件的第
20
行。
|
在 vi
或 vim
编辑器中,可以使用以下方法来实现行的连接:
使用 J
命令: 在命令模式下,将光标放在要连接的第一行的末尾处(即行尾),然后按下大写字母 J
键。这将删除第一行的换行符,并将其与下一行合并为一行。
使用 :join
命令: 在命令模式下,输入 :join
命令,然后按下回车键。这将连接当前行和下一行,并将它们合并为一行。
使用可视块(Visual Block)模式: 这种方法适用于需要连接多行的情况。首先,按下 Ctrl + v
进入可视块模式。然后,使用上下箭头或其他光标移动命令选择要连接的多行。接下来,按下大写字母 J
来连接选定的行。
通过合并行,我们可以将多行文本合并为单行,从而满足特定的编辑需求。?
在 vi
或 vim
编辑器中,有多种方法可以使用查找功能来搜索文本。以下是一些常用的查找命令和技巧:
基本查找:
/
?键,然后输入要查找的文本,并按下回车键。例如,要查找单词 "apple",输入?/apple
。n
?键可以继续向后查找下一个匹配项。N
?键可以反向查找上一个匹配项。正则表达式查找:
/
?键,然后输入要查找的正则表达式,并按下回车键。例如,要查找以字母 "a" 开头的单词,输入?/^a\w*
。忽略大小写查找:
:set ignorecase
?命令,然后按下回车键。这将开启忽略大小写的查找功能。/
?命令进行查找时,不区分大小写。高亮显示匹配项:
:set hlsearch
?命令,然后按下回车键。这将开启匹配项的高亮显示功能。按下 /
键,然后输入要查找的文本,再次按下回车键。例如,如果要查找单词 "apple",输入 /apple
。取消匹配项高亮显示:在任何时候,如果想取消匹配项的高亮显示,可以在命令模式下输入 :nohlsearch
命令,然后按下回车键。
在 vi
或 vim
编辑器中,可以使用替换命令来进行文本替换操作。以下是基本的替换步骤:
进入命令模式:按下 Esc
键确保处于命令模式。
执行替换命令:输入 :%s/pattern/replacement/g
命令,并按下回车键。
%
?表示对整个文件进行替换操作。s
?表示 "substitute",即替换的意思。pattern
?是要被替换的文本模式。replacement
?是要替换成的新文本。g
?表示全局替换,即替换所有匹配项,而不仅仅是每行的第一个匹配项。vi/vim
将会执行替换操作并显示替换结果。
可选:确认每个替换项(交互式替换):
:%s/pattern/replacement/gc
?命令来进行交互式替换。也可以限制替换范围:
%
?替换为行号或行号范围。注意:
- 如果替换的文本中包含了?
/
?字符,需要使用?\
?进行转义,例如?/
?需要输入为?\/
。- 如果要替换的文本中包含特殊字符,可以使用?
\
?进行转义,例如?\t
?表示制表符。
替换用法的另一种理解方法:
: [定址]s/旧/新/[g]
#不加定址只会替换光标所在的一行中匹配上的字符
定址: ?
1 ????只替换第一行
1,5 ??第一行到第五行
% ????全部行
5,$ ??第五行到最后一行
$-3 ??倒数第四行
$-9,$ 倒数第10行到最后一行
加上 g ??是整行所有匹配到的字符都替换
不加 g ??是替换(定址)选中行的第一个匹配项
以下是一些示例展示:
#替换所有的root为ROOT
:%s/root/ROOT/g
#替换所有行的第一个root为ROOT
:%s/root/ROOT/
#替换光标当前行的root为ROOT
:s/root/ROOT/g
#替换第一行的第一个root为ROOT
:1s/root/ROOT/
#替换后10行的/为\
:$-9,$s/\//\\/g
:%s/bash/BASH/gc
【enter】后底行显示:
?选项解释:
每输入一次y将替换一次。最后结果如下:
?
在 vi
或 vim
编辑器中,可以使用撤销操作来恢复先前的修改。以下是几种常见的撤销操作方式:
撤销最后一次编辑:
Esc
?键确保处于命令模式。u
?命令,然后按下回车键。多次撤销:
Esc
?键确保处于命令模式。:undo [n]
?命令,并按下回车键。[n]
?是一个可选参数,表示要撤销的步骤数,默认为 1。撤销所有更改:
Esc
?键确保处于命令模式。:e!
命令,并按下回车键。:e
?表示重新加载当前文件。!
?表示强制重新加载,忽略未保存的更改。撤销到特定操作或保存点:
Esc
?键确保处于命令模式。:earlier [n]
?命令,并按下回车键。[n]
?是一个可选参数,表示要撤销到的特定操作或保存点。在 vi
或 vim
编辑器中,有几种方式可以退出编辑器。以下是常见的退出方法:
保存并退出:
Esc
?键确保处于命令模式。:wq
?命令,并按下回车键。不保存并退出:
Esc
?键确保处于命令模式。:q!
?命令,并按下回车键。保存但不退出:
Esc
?键确保处于命令模式。:w
?命令,并按下回车键。不保存退出:
Esc
键确保处于命令模式,使用:q安全地退出。:wq
),或者放弃更改并退出编辑器(:q!
)。vi file1 file2 file3...
ls -l /root > ls-passwd1.txt
vi users.txt ls-passwd1.txt
vi
或
vim
编辑器中切换到下一个或上一个文件,
打开
编辑器并进入
ex
模式。在终端中运行
vi
命令,然后按下
:
键进入
ex
模式。
在
ex
模式下,
可以使用以下命令:
:next
?或?:n
?命令,然后按下回车键。:previous
?或?:N
?命令,然后按下回车键。当我们从一个文件移到另一个文件时,如果当前文件没有保存修改, vi 会阻止我们切换文 件,这是 vi 强制执行的政策。在命令之后添加感叹号,可以强迫 vi 放弃修改而转换文件。
vi users.txt
:e ls-passwd1.txt
vim
和 vi
在使用上有很多相似之处,但也存在一些区别。基本上可以说,vim
是 vi
的改进版本,提供了更多功能和便捷的操作。
以下是一些 vim
相对于传统的 vi
所具有的特点和改进:
增强功能: vim
提供了许多额外的功能和命令,如语法高亮、代码补全、多级撤销/重做、分屏编辑、多标签页等。这些功能使得在 vim
中进行编辑更加方便和高效。
可定制性: vim
允许用户自定义配置文件,以满足个人偏好和需求。用户可以修改颜色方案、绑定快捷键、添加插件等,从而使编辑器适应自己的工作流程。
模式: vim
引入了不同的编辑模式,包括命令模式、插入模式和可视模式。这些模式使得 vim
更灵活和强大,用户可以根据需要在不同的模式下执行不同的操作。
尽管 vim
在功能和用法上扩展了 vi
,但两者仍然遵循相同的基本思想和大部分命令。因此,如果你熟悉 vi
,你会发现在 vim
中也能够轻松地进行编辑。不过,对于某些高级功能和定制选项,可能需要更深入地了解 vim
的文档和配置。
:buffer 2
【enter】后我们的屏幕现在会显示第二个文件:
本篇大致总结了vi/vim命令的相关使用方法,但是由于这部分的命令比较冗杂,我也是尽力按照之前学习笔记的逻辑思路进行梳理,这块的内容还有一部分需要再划分整理,我会在第二篇中继续汇总,并对该篇中缺失的命令再补充,同时也会把常用的命令梳理到一张表中方便区分和记忆。
当然最好的学习方式就是我们自己动手练习,不断的练习操作才能更快的掌握。
最后,感谢大家的查看,如果对你们有帮助的话,就点个赞/关注 支持下吧!我会很快将篇2写好发布,敬请期待!