第4章 Vim文本编辑器

命令速查表

命令历史

以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。
启动vim

在命令行窗口中输入以下命令即可
vim 直接启动vim
vim filename 打开vim并创建名为filename的文件
文件命令

打开单个文件
vim file
同时打开多个文件
vim file1 file2 file3 ...
在vim窗口中打开一个新文件
:open file
在新窗口中打开文件
:split file
切换到下一个文件
:bn
切换到上一个文件
:bp
查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。
:args
打开远程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt
:e \qadrive	est.txt
vim的模式

正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
插入模式(按i键进入) 左下角显示--INSERT--
可视模式(不知道如何进入) 左下角显示--VISUAL--
导航命令

% 括号匹配
插入命令

i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
查找命令

/text  查找text,按n健查找下一个,按N健查找前一个。
?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。
vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$
:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找
查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
:set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。
:set nohlsearch  关闭高亮搜索显示
:nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
替换命令

ra 将当前字符替换为a,当期字符即光标所在字符。
s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
%s/old/new/ 用old替换new,替换所有行的第一个匹配
%s/old/new/g 用old替换new,替换整个文件的所有匹配
:10,20 s/^/    /g 在第10行知第20行每行前面加四个空格,用于缩进。
ddp 交换光标所在行和其下紧邻的一行。
移动命令

h 左移一个字符
l 右移一个字符,这个命令很少用,一般用w代替。
k 上移一个字符
j 下移一个字符
以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。
w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。
b 向后移动一个单词 2b 向后移动2个单词
e,同w,只不过是光标停在单词尾部
ge,同b,光标停在单词尾部。
^ 移动到本行第一个非空白字符上。
0(数字0)移动到本行第一个字符上,
<HOME> 移动到本行第一个字符。同0健。
$ 移动到行尾 3$ 移动到下面3行的行尾
gg 移动到文件头。 = [[
G(shift + g) 移动到文件尾。 = ]]
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
F 同f,反向查找。
跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
撤销和重做

u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。
删除命令

x 删除当前字符
3x 删除当前光标开始向后三个字符
X 删除当前字符的前一个字符。X=dh
dl 删除当前字符, dl=x
dh 删除前一个字符
dd 删除当前行
dj 删除上一行
dk 删除下一行
10d 删除当前行开始的10行。
D 删除当前字符至行尾。D=d$
d$ 删除当前字符之后的所有字符(本行)
kdgg 删除当前行之前所有行(不包括当前行)
jdG(jd shift + g)   删除当前行之后所有行(不包括当前行)
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J(shift + j)  删除两行之间的空行,实际上是合并两行。
拷贝和粘贴

yy 拷贝当前行
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
p  在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
shift+p 在当前行前粘贴
:1,10 co 20 将1-10行插入到第20行之后。
:1,$ co $ 将整个文件复制一份并添加到文件尾部。
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
ddp交换当前行和其下一行
xp交换当前字符和其后一个字符
剪切命令

正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。
退出命令

:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。
窗口命令

:split或new 打开一个新窗口,光标停在顶层的窗口上
:split file或:new file 用新窗口打开文件
split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
Ctrl+ww 移动到下一个窗口
Ctrl+wj 移动到下方的窗口
Ctrl+wk 移动到上方的窗口
关闭窗口
:close 最后一个窗口不能使用此命令,可以防止意外退出vim。
:q 如果是最后一个被关闭的窗口,那么将退出vim。
ZZ 保存并退出。
关闭所有窗口,只保留当前窗口
:only
录制宏
按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。
执行shell命令

:!command
:!ls 列出当前目录下文件
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。
注释命令

perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
3,5 s/^/#/g 注释第3-5行
3,5 s/^#//g 解除3-5行的注释
1,$ s/^/#/g 注释整个文档。
:%s/^/#/g 注释整个文档,此法更快。
帮助命令

:help or F1 显示整个帮助
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
:help 'number' Vim选项的帮助用单引号括起
:help <Esc> 特殊键的帮助用<>扩起
:help -t Vim启动参数的帮助用-
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回
其他非编辑命令

. 重复前一次命令
:set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
:scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
Vim教程

在Unix系统上
$ vimtutor
在Windows系统上
:help tutor
:syntax 列出已经定义的语法项
:syntax clear 清除已定义的语法规则
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案

Linux Vim三种工作模式

Linux 中的所有内容以文件形式管理,在命令行下更改文件内容,常常会用到文本编辑器。
我们首选的文本编辑器是 Vim,它是一个基于文本界面的编辑工具,使用简单且功能强大,更重要的是,Vim 是所有 Linux 发行版本的默认文本编辑器。
很多 UNIX 和 Linux 的老用户习惯称呼它为 Vi,Vi 是 Vim 的早期版本,现在我们使用的 Vim(Vi improved)是 Vi 的増强版,増加了一些正则表达式的査找、多窗口的编辑等功能,使得 Vim 对于程序开发来说更加方便。

想了解 Vi 和 Vim 的区别,可以在 Vim 命令模式下输入":help Vi_diff",就能够看到两者区别的摘要。值得一提的是,Vim 是慈善软件,即软件使用是免费的。

Vim的工作模式

在使用 Vim 编辑文件前,我们先来了解一下它的三种工作模式:命令模式、输入模式和编辑模式,如图 1 所示。



图 1 Vim 的三种工作模式

命令模式

使用 Vim 编辑文件时,默认处于命令模式。在此模式下,可以使用上、下、左、右键或者 k、j、h、l 命令进行光标移动,还可以对文件内容进行复制、粘贴、替换、删除等操作。

输入模式

在输入模式下可以对文件执行写操作,类似在 Windows 的文档中输入内容。进入输入模式的方法是输入 i、a、o 等插入命令,编写完成后按 Esc 键即可返回命令模式。

编辑模式

如果要保存、查找或者替换一些内容等,就需要进入编辑模式。编辑模式的进入方法为:在命令模式下按":"键,Vim 窗口的左下方会出现一个":"符号,这时就可以输入相关的指令进行操作了。指令执行后会自动返回命令模式。

对于新手来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以按一次 Esc 键返回命令模式。如果你多按几次 Esc 键后听到"嘀————"的声音,则代表你已经处于命令模式了。

Linux Vim基本操作

了解了 Vim 的工作模式后,就可以愉快地使用 Vim 进行文件编辑了。先来看一下 Vim 打开文件的方法。

使用Vim打开文件

使用 Vim 打开文件很简单,例如,笔者想打开一个自己编写的文件 /test/vi.test,打开方法如下:

[root@itxdl ~]# vim /test/vi.test

刚打开文件时进入的是命令模式,此时文件的下方会显示文件的一些信息,包括文胳文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入输入模式对文件进行编辑,如图 1 所示。



图 1 Vim 打开文件


接下来的操作练习,如果你的 Linux 中没有自己编写的文件,或者你懒得编写文件,则可以直接复制一个系统文件,方法如下:

[root@itxdl ~]# cp /etc/passwd /tmp/passwd.vi

千万不要随意打开一个系统文件就直接开始练习!

直接进入指定位置

如果想直接进入 Vim 编辑文件的指定行数处或者特定字符串所在行,节省编辑时间,例如,打开 /tmp/passwd.vi 文件时直接进入第 20 行,则可以这样操作:

[root@itxdl ~]# vim +20 /tmp/passwd.vi

打开文件后,直接进入"nobody"字符串所在行,则可以这样操作:

[root@itxdl ~]#vim +/nobody /tmp/passwd.vi

如果文件中有多个"nobody"字符串,则会以査到的第一个为准。

打开文件后,接下来开始对文件进行编辑。Vim 虽然基于文本模式的编辑器,但却提供了丰富的编辑功能。对于习惯使用图形界面的朋友来说,刚开始会较难适应,但是熟练后就会发现,使用 Vim 进行编辑实际上更加快速。

插入命令

从命令模式进入输入模式进行编辑,可以按下 I、i、O、o、A、a 等键来完成,不同的键只是光标所处的位置不同而已。当进入输入模式后,你会发现,在 Vim 编辑窗口的左下角会出现"INSERT"标志,这就代表我们可行写入操作了,如图 1 所示。



图 1 输入模式


常用的插入命令:

  • i:在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
  • I:在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行i命令
  • a:在当前光标所在位置之后插入随后输入的文本
  • A:在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令
  • o:在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
  • O:在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本


注意,在 Linux 纯字符界面中,默认是不支持中文输入的。如果想要输入中文,则有三种方法:

  1. 安装中文语言支持和图形界面,在图形界面下输入中文,使用 gVim (Vim 的图形前端)。
  2. 安装中文语言支持,使用远程连接工具(如 PuTTY),在远程连接工具中调整中文编码,进行中文输入。
  3. 倘若非要在 Linux 纯字符界面中输入中文,则可以安装中文插件,如 zhcon。

光标移动命令

在进行编辑工作之前,需要将光标移动到适当的位置。Vim 提供了大量的光标移动命令,注意这些命令需要在命令模式下执行。下面介绍一些常用的光标移动命令。

以字符为单位移动

习惯使用鼠标的用户可能很自然地想到用光标来进行编辑定位,但是你会发现鼠标不会给你任何反应。在Vim中进行定位需要通过上、下、左、右方向键,并且无论是命令模式还是输入模式,都可以通过方向键来移动光标(在编辑模式中,方向键是用来査看命令历史记录的)。

另外,还可以在命令模式中使用 h、j、k、l 这 4 个字符控制方向,分别表示向左、向下、向上、向左。在大量编辑文档时,会频繁地移动光标,这时使用方向键可能会比较浪费时间,使用这 4 个键就很方便快捷。当然,这同样是一件熟能生巧的事情。

以单词为单位移动

有时候需要迅速进入一行中的某个位置,如果能使光标一次移动一个单词就会非常方便。可以在命令模式中使用"W"命令来使光标向后跳到下一个单词的单词首,或者使用"b"命令使光标向前跳到上一个单词的单词首,还可以使用"e"命令使光标跳到下一个单词的单词尾,即:

  • w:移动光标到下一个单词的单词首
  • b:移动光标到上一个单词的单词首
  • e:移动光标到下一个单词的单词尾

移动到行尾或者行首

可以使用"$"命令将光标移至行尾,或者使用"0"或"^"命令将光标移至行首。其实,对于 $ 命令来说,可以使用诸如"n$"之类的命令来将光标移至当前光标所在行的之后 n 行的行尾(n 为数字);对于"0"命令来说却不可以,但可以用"n^"。

移动到一行的指定字符处(f 命令)

如果在一行中需要将光标移动到当前行的某个特定字符处,则可以使用 f 命令。

例如,某行为"you can you up, no can no bb",现在需要将光标移动到字符 p 处,则可以使用"fp"命令,这样光标就会迅速定位到字符 p 处。f 命令有一个使用条件,即光标需在指定字符前。

移动到匹配的括号处(%命令)

如果你是一名程序员,那么在使用 Vim 进行编辑时经常会为将光标移动到与一个"("匹配的")"(对于 [] 和 {} 也是一样的)处而感到头疼。其实在 Vim 里面提供了一个非常方便地査找匹配括号的命令,这就是"%"。

比如,在 /etc/init.d/sshd 脚本文件中(最好还是复制后练习,小心驶得万年船),想迅速地将光标定位到与第 49 行的"{"相对应的"}"处,则可以将光标先定位在"{"处,然后再使用"%"命令,使之定位在"}"处,如图 2 所示。



图 2 使用"%"命令定位括号

移动到指定行处(nG 或 :n 命令)

可以直接在命令模式中输入"nG"(n 为数字,G 为大写)或":n"(在编辑模式中输入数字)命令将光标快速地定位到指定行的行首。这种方法对快速移动光标非常有效。

使用Vim进行编辑

光标移动到指定位置后,如何进行编辑操作呢?Vim 提供了大量的编辑命令,下面介绍其中一些常用的命令。

査找指定字符串

一个字符串可以是一个或者多个字母的集合。如果想在 Vim 中査找字符串,则需要在命令模式下进行。在 Vim 命令模式中输入"/要査找的字符串",再按一下回车键,就可以从光标所在行开始向下査找指定的字符串。如果要向上査找,则只需输入"?要査找的字符串"即可。

例如,在 /etc/passwd.vi 文件中査找字符串"root",则运行命令如图 3 所示。



图 3 使用 Vim 进行查找


如果匹配的字符串有多个,则可以按"n"键向下继续匹配査找,按"N"键向上继续匹配査找。如果在文件中并没有找到所要査找的字符串,则在文件底部会出现"Pattern not found"提示,如图 4 所示。



图 4 未査找到指定字符串的提示


在査找过程中需要注意的是,要査找的字符串是严格区分大小写的,如査找"shenchao"和"ShenChao"会得到不同的结果。如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"。如果在字符串中出现特殊符号,则需要加上转义字符"\"。常见的特殊符号有 \、*、?、\ $ 等。如果出现这些字符,例如,要査找字符串"10$",则需要在命令模式中输入"/10\$"。

还可以查找指定的行。例如,要査找一个以 root 为行首的行,则可以进行如下操作:

/^root

要査找一个以 root 为行尾的行,则可以进行如下操作:

/root$

使用Vim进行替换

小写"r"可以替换光标所在处的某个字符,将光标移动到想替换的单个字符处,按下"r"键,然后直接输入替换的字符即可。

大写"R"可以从光标所在处开始替换字符,输入会覆盖后面的文本内容,直到按 Esc 键结束,如图 5 所示。



图 5 使用"R"进行替换


按下"R"键替换后,Vim 编辑文件左下角会显示"REPLACE",进入替换状态。笔者在第一行"root"后输入英文"need just word, word has word",直到按 Esc 键才会退出替换;否则将一直处于替换状态。

批量替换格式如下:

  • 替换范围内的字符串::替换起始处,替换结束处s/源字符串/替换的字符串/g。
  • 替换整篇文档的字符串::%s/源字符串/替换的字符串/g(如果不加g,则只替换每行第一个找到的字符串)。

例如,要将某文件中所有的"root"替换为"liudehua",则有两种输入命令,分别为:

:1, $s/root/liudehua/g

:%s/root/liudehua/g

上述命令是在编辑模式下操作的,表示的是从第一行到最后一行,即全文査找"root",然后替换成"liudehua"。
如果刚才的命令变成:10,20 s/root/liudehua/g,则只替换从第 10 行到第 20 行的"root"。

使用 Vim 进行删除、粘贴、复制

如果处于命令模式下,则可以按下"x"键来删除光标所在位置的单个字符;快速按两下"d"键来进行整行删除;如果想要删除连续多行,例如,想要删除 10 行,则可按下"10dd",可以快速删除当前光标所在行下 10 行。
此时被删除的内容并没有真正删除,都临时放在了内存中。将光标移动到指定位置处,按下"p"键,就可以将刚才删除的内容又粘贴到此处。在软件开发中可能需要将连续两行进行互换,就可以将上面的一行过"dd"键删除,再将光标移动到下面,通过"p"键将其重新粘贴,这样就能够达到两行互换位置的目的。
"dG"键可以删除从光标所在行一直到文件末尾的全部内容,而"D"键可以删除从光标所在处到这行行尾的内容。如果要删除指定范围的行,则可以用":起始行,终止行d"。如删除第 1~3 行,则输入":1, 3d",如图 6 所示,会提示"3 fewer lines"。



图 6 删除指定范围的行


还有"yy"键来复制单行,或者通过在前面加上数字来复制当前光标所在行下的多行。
有时候可能需要把两行进行连接。如在下面的文件中有两行,现在需要使其成为一行,实际上就是将两行间的换行符去掉。可以直接在命令模式中按下"J"键,按下前后如图 7 所示。



图 7 按下"J"键前后

使用Vim撤销上一步操作

如果不小心误删除了文件内容,则可以通过"u"键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次"u"键。

保存退出命令

估计前面一大堆的操作已经让你有些力不从心了,其实,这还只是总结出来的常用部分,不过对于曰常使用基本足够了,不用死记硬背,只需多练习就能掌握。
Vim 的保存和退出是在命令模式中进行的,为了方便记忆,只需要记住 w、q、!三个符号的含义即可完成任务:

  • 字母"w":保存不退出;
  • 字母"q":不保存退出;
  • 字符"!":强制性操作;

例如,在命令模式中只输入"W"字母,就意味着保存但不退出;如果输入"wq"就意味着保存并且退出;如果输入"w!"或"wq!"就意味着强制保存或强制保存退出,这种情况经常发生在对文件没有写权限的时候(显示 readonly,如图 8 所示),但如果你是文件的所有者或者 root 用户,就可以强制执行。


图 8 只读文件


其他用法,如"q!"表示不保存退出;保留源文件,而另存为其他的文件,可以用"w新文件名",如"w /tmp/shadow.vi"。
在命令模式中,还可以输入"ZZ"命令退出,按两次"Shift+Z"快捷键方便,笔者强烈推荐。此时如果对文件没有修改,就是不保存退出;如果对文件已经进行了修改,就是保存后退出。

Linux Vim显示行号

在使用 Vim 进行编辑的过程中,经常会遇到需要同时对连续几行进行操作的情况,这时如果每行都有行号提示,就会非常方便。

在命令模式下输入":set nu"即可显示每一行的行号,如图 1 所示。


图 1 显示行号

如果想要取消行 号,则再次输入":set nonu"即可。
如果希望每次打开文件都默认显示行号,则可以编辑 Vim 的配置文件。每次使用 Vim 打开文件时,Vim 都会到当前登录用户的宿主目录(用户配置文件所在地)中读取 .vimrc 文件,此文件可以对 Vim 进行一些默认配置设定。
如果 .vimrc 文件存在,就先读取其中对 Vim 的设置;否则就采取默认配置。在默认情况下,用户宿主目录中是没有此文件的,需要在当前用户的宿主目录中手工建立,如"vim~/.vimrc","~"代表宿主目录,root 的宿主目录为 /root/,普通用户的宿主目录存放在 /home/ 目录下。可以直接使用 Vim 编辑生成此文件,并在此文件中添加一行"set nu",保存并退出,如图 2 所示。

图 2 .vimrc配置文件

之后此用户登录,每次 Vim 打开文件时,都会默认显示行号。常见的可以写入 .vimrc 文件中的设置参数如表 3 所示。

表 3 常见的可以写入.vimrc文件中的设置参数
设置参数 含 义
:set nu
:set nonu
设置与取消行号。
:syn on
:syn off
是否依据语法显示相关的颜色帮助。在Vim中修改相关的配置文件或Shell脚本文件 时(如前面示例的脚本/etc/init.d/sshd),默认会显示相应的颜色,用来帮助排错。如果觉得颜色产生了干扰,则可以取消此设置
set hlsearch
set nohlsearch
设置是否将査找的字符串高亮显示。默认是hlsearch高亮显示
set nobackup
set backup
是否保存自动备份文件。默认是nobackup不自动备份。如果设定了:set backup,则会产生“文件名〜”作为备份文件
set ruler
set noruler
设置是否显示右下角的状态栏。默认是ruler显示
set showmode
set noshowmode
设置是否在左下角显示如“一INSERT--”之类的状态栏。默认是showmode显示

设置参数实在太多了,这里只列举了常见的几个,可以使用":set all"命令査看所有的设置参数。这些设置参数都可以写入 .vimrc 配置文件中,让它们永久生效,也可在 Vim 中执行,让它们临时生效。

Linux Vim多窗口编辑

在编辑文件时,有时需要参考另一个文件,如果在两个文件之间进行切换则比较麻烦。可以使用 Vim 同时打开两个文件,每个文件分别占用一个窗口。

例如,在査看 /etc/passwd 时需要参考 /etc/shadow,有两种办法可以实现:

  1. 先使用 Vim 打开第一个文件,接着输入命 令":sp/etc/shadow"水平切分窗口,然后按回车键;如果想垂直切分窗口则可以输入":vs/etc/shadow";
  2. 可以直接执行命令"vim-o 第一个文件名 第二个文件名",也就是"vim-o /etc/passwd /etc/shadow"。

得到的结果如图 1 所示。


图 1 使用 Vim 打开多个窗口

切换到另一个文件窗口,可以按"Ctrl+WW"快捷键。
如果想将一个文件的内容全部复制到另一个文件中,则可以输入命令":r被复制的文件名",即可将导入文件的全部内容复制到当前光标所在行下面。

Linux Vim批量注释和自定义注释

使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符"#"再退回命令模式,非常麻烦。
连续行的注释其实可以用替换命令来完成。换句话说,在指定范围行加"#"注释,可以使用":起始行,终止行 s/^/#/g",例如:

:1,10s/^/#/g

表示在第 1~10 行行首加"#"注释。"^"意为行首。"g"表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将"g"改为"c"。
取消连续行注释,则可以使用":起始行,终止行s/^#//g",例如:

:1,10s/^#//g

意为将行首的"#"替换为空,即删除。
当然,使用语言不同,注释符号或想替换的内容不同,都可以采用此方法,灵活运用即可。
添加"//"注释要稍微麻烦一些,":起始行,终止行 s/^/\/\//g",因为"/"前面需要加转义字符"\",所以写出来比较奇特,例如:

:1,5s/^/\/\//g

表示在第 1~5 行行首加"//"注释。
以上方法可以解决连续行的注释问题,如果是非连续的多行就不灵了,这时我们可以定义快捷键简化操作。格式如下:

:map 快捷键 执行命令

如定义快捷键"Ctrl+P"为在行首添加"#"注释,可以执行":map^P l#<Esc>"。其中"^P"为定义快捷键"Ctrl+P"。注意:必须同时按"Ctrl+V+P"快捷键生成"^P"方可有效,或先按"Ctrl+V"再按"Ctrl+P"也可以,直接输入"^P"是无效的。
"l#<Esc>"就是此快捷键要触发的动作,"l"为在光标所在行行首插入,"#"为要输入的字符,"<Esc>"表示退回命令模式。"<Esc>"要逐个字符输入,不可直接按键盘上的 Esc 键。
设置成功后,直接在任意需要注释的行上按"Ctrl+P"快捷键,就会自动在行首加上"#"注释。取消此快捷键定义,输入":unmap^P"即可。
我们可以延伸一下,如果想取消文件行首的快捷键,则可以设置"imap^B 0x",快捷键为"Ctrl+B", "0"表示跳到行首,"x"表示删除光标所在处字符。
再如,有时我们写完脚本等文件,需要在末尾注释中加入自己的邮箱,则可以直接定义每次按快捷键"Ctrl+E"实现插入邮箱,定义方法为":map^E asamlee@itxdl.net<Esc>"。其中,"a"表示在当前字符后插入,"samlee@itxdl.net"为插入的邮箱,"<Esc>" 表示插入后返回命令模式。
所以,通过定义快捷键,我们可以把前面讲到的命令组合起来使用。
将快捷键对应的命令保存在 .vimrc 文件中,即可在每次使用 Vim 时自动调用,非常方便。

 

posted @ 2024-08-13 20:13  鲸鱼的海老大  阅读(47)  评论(0)    收藏  举报