linux vim编辑器
文章目录
第一版的Vi
是由Bill Joy
在1976
年完成的,单词来源于visual
vi
实际上整合了一个强大的行编辑器-ex
,所以我们在使用vi
的时候可以使用行编辑命令
vim
可以说是vi
的高级版本,是由Bram Mookenaar
开发的,相对于传统的vi
来说,有了很大的改进
vim
在Linux
中实际上是vi
的符号链接(或者说是别名)
一:启动和退出
启动vi
或者vim
只要键入简单的命令就可以了
$ vi
通过提示可以键入:q
退出[注意:
是命令的一部分]
:q
通过给命令加上叹号,我们可以告诉 vi 我们真要退出 vi[强制退出]。
:q!
如果你在 vi
中“迷失”了,试着按下 Esc
键两次来回到普通模式
二:创建文件和插入模式
可以使用==vi
+ 不存在的文件名==的方式创建一个新的文件
$ vi foo.txt
每行开头的波浪号(∼
)表示那一行没有文本
vi
启动后会直接进入命令模式。这种模式下,几乎每个按键都是一个命令
可以通过命令模式下输入i
键[insert
]切换到插入模式,此时左下角会显示当前处在 插入模式【--insert--
】
此时就可以正常的输入文本内容了。输入完成后,键入Esc
键就可以返回到命令模式中
此时在命令模式中键入:wq
就可以保存退出了
三:移动光标
按键 | 移动操作 |
---|---|
l or → | 向右移动一个字符 |
h or ← | 向左移动一个字符 |
j or ↓ | 向下移动一个字符 |
k or ↑ | 向上移动一个字符 |
0 | 移动到当前行的行首 |
^ | 移动到当前行的第一个非空字符 |
$ | 移动到当前行的末尾 |
w | 移动到下一个单词或标点符号的开头 |
W | 移动到下一个单词的开头,忽略标点符号 |
b | 移动到上一个单词或标点符号的开头 |
B | 移动到上一个单词的开头,忽略标点符号 |
page Down or ctrl-f | 向下翻一页 |
page Up or ctrl-b | 向上翻一页 |
[number]G | 移动到第number 行。例如,1G 移动到文件的第一行 |
G | 移动到文件末尾 |
四:基本编辑
1:撤销操作 -> u
如果我们按下u
按键[undo
],当在命令模式下,vi
将会撤销你所做的最后一次修改
2:追加文本 -> a
如果我们想要在这个句子的末尾添加一些文本,我们会发现i
命令不能完成任务,因为我们不能把光标移到行尾
vi
提供了追加文本的命令,明智地命名为a
[append
]。
如果我们把光标移动到行尾,输入a
, 光标就会越过行尾,同时vi
会进入插入模式
3:打开一行 -> o | O
我们插入文本的另一种方式是打开[open
]一行。这会在两行之间插入一个空白行,并且进入到插入模式
命令 | 打开行 |
---|---|
o | 当前行的下方打开一行 |
O | 当前行的上方打开一行 |
- 如果把光标移到
Line 3
上,再按下小o
按键
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
Line 3
<- 注意这行是新加入的,在第三行之下打开了新的一行,并且进入插入模式
line 4
line 5
- 如果把光标移到
Line 3
上,再按下大O
按键
The quick brown fox jumped over the lazy dog. It was cool.
Line 2
<- 在光标之上打开新的一行
Line 3
Line 4
Line 5
4:删除文本 -> x | d
x
按键会删除光标位置的一个字符。可以在 x
命令之前带上一个数字,来指明要删除的字符个数。
d
按更通用一些。跟 x
命令一样,d
命令之前可以带上一个数字,来指定要执行的删除次数。
另外,d
命令之后总是带上一个移动命令,用来控制删除的范围
下面举几个例子:
命令 | 删除的文本 |
---|---|
x | 当前的字符 |
3x | 当前字符及其后的两个字符。 |
命令 | 删除的文本 |
---|---|
dd | 当前行 |
5dd | 当前行及随后的四行文本 |
dW | 从光标位置开始到下一个单词的开头 |
d$ | 从光标位置开始到当前行的行尾 |
d0 | 从光标位置开始到当前行的行首 |
d^ | 从光标位置开始到文本行的第一个非空字符 |
dG | 从当前行到文件的末尾 |
d20G | 从当前行到文件的第20 行 |
真正的 vi
只是支持单层面的 undo
命令。vim
则支持多个层面的
5:剪切、复制和粘贴 -> dd & yy & p
d
命令不仅删除文本,它还“剪切”文本。每次我们使用d
命令,删除的部分被复制到一个粘贴缓冲区中(看作剪切板)。
过后我们执行小 p
命令把剪切板中的文本粘贴到光标位置之后,或者是大P
命令把文本粘贴到光标之前
6:连接行 -> J
用户不可能通过删除“行尾结束符”来连接当前行和它下面的一行。由于这个原因,大写的J
用于链接行与行
假设现在里面有个文件foo.txt
想要将Line 2
和Line 3
放到同一行,就可以在命令模式下,将光标放在Line 2
所在行, 然后按下J
【注意不是j
,这个是移动光标用的】
五:查找
1:全文查找 -> /
移动光标到下一个出现的单词或短语上,使用 /
命令。这个命令和我们之前在 less
程序中学到的一样。
当你输入/
命令后,一个/
字符会出现在屏幕底部。
接下来,输入要查找的单词或短语,按下回车。光标就会移动到下一个包含所查找字符串的位置。
通过 n
命令【next
】来重复先前的查找
2:查找并且替换 -> :[s/n]s/old/new/[g]
还是以这个文件为例:foo.txt
如果我们想要替换所有的Line
-> line
,可以在命令模式下输入:%s/Line/line/g
此条目的具体解释如下:
条目信息 | 解释 |
---|---|
: | 冒号字符运行一个 ex 命令 |
% | 指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范围也可以用 1,5 来代替(因为我们的文件只有 5 行文本),或者用 1,$ 来代替,意思是“从第一行到文件的最后一行。”如果省略了文本行的范围,那么操作只对当前行生效 |
s | 指定操作。在这种情况下是,替换(查找与替代)s -> substitute |
/Line/line | 查找类型与替代文本 |
g | 这是“全局”的意思->global 。如果省略 g ,则只替换每个文本行中第一个匹配的字符串 |
是否替换
通过添加一个 c
字符到这个命令的末尾,来完成这个替换命令
这个命令会把我们的文件恢复先前的模样,在执行每个替换命令之前,vi
会停下来,通过下面的信息,来要求我们确认这个替换
操作 | 说明 |
---|---|
y | 替换 |
n | 不替换,跳过这个匹配 |
a | 对这个及随后所有匹配的字符串执行替换操作 |
q | 退出 == Esc |
l | 执行这次替换并退出。l 是last 的简写。 |
Ctrl-E Ctrl-Y | 分别是向下滚动和向上滚动。用于查看建议替换的上下文 |
六:多文件编辑
1:文件之间的切换 -> :n & :N
下面以这两个文件进行测试
同时打开两个文件,其中前面的会展示出来:
$ vim foo.txt output.txt #将会展示出来 foo.txt
展示之后,可以在命令模式下键入:n
切换到output.txt
。再输入将会提示无法切换了,说明只能向后切换next
性
此时可以键入N
往前找
2:打开文件管理 -> :buffers
这些命令使多个文件更容易管理。我们可以查看正在编辑的文件列表,使用:buffers
命令。运行这个命令后,屏幕顶部就会显示出一个文件列表
要切换到另一个缓冲区(文件),输入:buffer + number
, 紧跟着你想要编辑的缓冲器编号
:buffer 2 # 此时就可以切换到output.txt
3:打开另一个文件并编辑 -> :e file_name
当文件由::e
命令加载,你将无法用:n
或:N
命令来切换文件。这时要使用:buffer + number
,来切换文件