Linux【4】-文本编辑1-vim

目前老被嫌弃慢,既然存在这个情况,就得找原因啊,其中有一个原因就是快捷键用的不是太熟。那好,就一个个的解决罗,今天先来了解一下vim的快捷键。

一、vim简介

1.安装

在一般情况下,无论何种 Linux 发行版本都是包括 Vim 的,并且在默认会安 装它。当然,万一你的主机上还没安装 VIM,请输入如下命令安装它。

[root@localhost ~]# yum install vim

2.运行 vim

[root@localhost ~]# vim file.txt

无论是哪个 Linux 发行版本,这条命令都会让 Vim 创建名为 file.txt 的文件。 这是个新的文件,所以你会看到一个空白的窗口。如果这个文件已经存在,那么 vim 将会打开这个文件。

3.配置

终端输入:

vim ~/.vimrc

然后把下面的语句加进去

set nu #显示行号
syntax on #语法标亮
#自动缩进
set cindent
set autoindent

我的配置:
set nu
set autoindent
syntax on
set cindent
set smartindent
set expandtab
set smarttab
set mouse=a

set tabstop=4
set shiftwidth=4
set softtabstop=4

set backspace=2
set textwidth=79

我后来没怎么用vim来写代码,所以简单的设置了一下,后面有需要再来补充,详见下面的参考资料

二、vim的编辑

2.1 vim 模式

Vim 是一个模式编辑器,也就是 vim 会根据所处的模式对不同行为作出不同 反应。

  • 一般模式(NORMAL)会在屏幕的底部显示文件名或者是空白;
  • 在输入模式,底部会显示 –INSERT–;
  • 在可视模式,底部显示的是–VISUAL–。

在打开 vim 时默认处于一般模式。

2.2 输入

要输入文字,你要让编辑器进入输入模式。按下 i 键,接着你会发现屏幕左 下方的文字变成了 –INSERT–(意味着编辑器进入了输入模式)。 现在输入一些文字。这些文字会被输入到文件中。不用怕出错,过一会儿你 就可以改正它们了。输入下面这首程序员的打油诗: 命令序列 错误!文档中没有指定样式的文字。-1

输入完,按下键,–INSER–消失了,编辑器又回到了命令模式。此 时你的屏幕应该跟下图相似。

Vim 用户常见的一个问题就是被编辑器的模式所困扰。这常常是因为 不清楚编辑器处在哪个模式,又或者不知道按下了哪个键导致编辑器 进入了另外一个模式引起的。事实上,无论编辑器当前在什么模式, 按下 Esc 键,它都会回到一般模式。有时需要按两次,如果 Vim 以一声蜂鸣回答你,那说明你已经是在一般模式了

默认情况下,vim 里面的文字不会自动换行。如果你不按回车键而一 直不停地输入文字直到它们到了编辑器的右边栏,你所做的只是输入 了非常长的一行文字,vim 不会为你自动换行。要换行的话,你必须 按下回车键(这是正常模式的操作,可以通过配置 vim 来要求 vim 给 你自动换行,不过如何配置在我们的课程中没有提到)。

h 的鍵位于左邊,每次按下就會向左移動。
 l 的鍵位于右邊,每次按下就會向右移動。
 j 鍵看起來很象一支尖端方向朝下的箭頭。
 k朝上移动。

0是行首,$是行尾

1.請按鍵(這是為了確保您處在正常模式)。 2.:q! <回車>不保存退出。 3.:wq <回車>保存并退出。

按下 i 鍵來插入文本。
輸入 dw 可以從光標處刪除至一個單字/單詞的末尾
 w - 從當前光標當前位置直到單字/單詞末尾,包括空格。
 e - 從當前光標當前位置直到單字/單詞末尾,但是 *不* 包括空格。
 $ - 從當前光標當前位置直到當前行末。

各种插入模式:

a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行
cw → 替换从光标所在位置后到一个单词结尾的字符

3. 删除一行或多行

.輸入 dd 可以刪除整一個當前行。
.輸入 dd 可以刪除整一個當前行。

通过退格键(Backspace)来删除一行代码显然是太麻烦了。可以通过切换到正常模式(编辑模式下按 ESC 键)来进行操作:

dd : (输入两次 d,下同)删除当前行;5dd :删除当前行开始的5行; dG :(先输入d,然后按 shift 键输入 g)删除当前行至最后一行的所以行。

4. 复制粘贴一块代码

你可能经常需要复制一行或一大块代码,使用 Vim 快捷键来实现此功能是非常简单的:

按 Esc 切换到正常模式;
把光标移到你需要复制的代码行首;
按 V 选择整行,可移动光标选择多行;
按 d 剪切或按 y 复制选择的代码;
移动光标到你需要粘贴的位置,按 p 粘贴代码到光标后的位置,或按 P 粘贴到光标前。

6.保存退出

你可以使用“:wq”命令来退出 vim。这个命令会将修改的文件写回硬盘然后 退出。如果你输入了“:wq”,你的修改会被提交而且不可以进行撤销和重复操作, 然后退出 vim。这个命令有三个部分:冒号(:),它会让编辑器进入命令模式; 命令 w,它告诉编辑器保存文件;命令 q,它告诉编辑器退出程序。 某些时候,你可能会在你改了一大堆东西后,突然意识到你就不应该修改这 个文件。不用担心,vim 有一个“退出然后放弃所有修改”的命令。它就是“:q!”。 这个命令同样有三个部分:冒号(:),它会让编辑器进入命令模式;命令 w,它 告诉编辑器保存文件;命令 q,它告诉编辑器退出程序;然后是强制命令修饰符 ——感叹号(!)。感叹号是必须的,它告诉 vim 无需保存文件。 我们也可以通过“ZZ”也即“Shift+z+z”命令来退出 vim,如果文件作过改 动“ZZ”命令就保存文件并退出 vim,如果文件没有作过改动“ZZ”命令就直接 退出 vim。

9.帮助

在最后,还有一个重要的命令要提到——帮助命令。要获取帮助,输入“:help”

或者按下 F1 键。

:help 会显示一个帮助的概览窗口。在帮助文档中可以使用 vim 的全部命令。 因此,按下 h、k、j 和 l 会向左、上、下、右移动。同样可以通过“zz”退出帮 助文档。 帮助文档中有些文字是被竖线封闭的(例如|usr_01.txt|)。它表示的是这个文 字是一个链接。如果你将鼠标放在两个竖线的中间然后按下 CTRL+](跳到该标 签),可以进入相应的主题3。可能在跳了几次后,你可能想要回到原来的位置。 CTRL+T(弹出标签)将你带回到之前的屏幕。 如果要完整地获取某个主题的帮助,使用

6. 代码注释

代码注释:

按 Ctrl+v 切换到可视化模式;
移动光标(j 或 k)选中需要注释的行的开头;
按大写 I,然后输入注释符,如 #;
最后按 Esc。

取消注释:

按 Ctrl+v 切换到可视化模式;
按 j 或 k 选择要删除的注释符;
按 d 或 x 删除注释符

如果使用 // 符号注释,则取消注释时需进行两遍操作。

翻页

Ctrl+f 向下翻页,Ctrl+b 向上翻页

7. 搜索

搜索在很多时候都是一个非常重要的功能。在文件中搜索一个特定的词,可以切换到正常模式,然后输入斜线( / ),之后跟上要搜索的词,回车即可。

/word-to-be-searched

按 n 显示下一个搜索结果,按 N 显示上一个搜索结果。

8. 把外部文件读入 Vim

我开始使用 Vim 的时候,经常会打开一个文件、复制内容、关闭文件、打开另一个文件、然后粘贴进去复制到内容。其实 Vim 中读取另一个文件的内容非常方便。切换到正常模式,然后按 :read。使用此快捷键你不需要手动打开文件来复制内容。

:read readme.md

9. 把命令的结果读入 Vim

有时候你需要把某个命令的结果复制到 Vim 中,这在 Vim 也非常简单。切换到正常模式,然后输入 :read !command 即可把 command 的结果输入到 vim 中。

:read !ls -l

10. 切换到上次修改的位置

想知道你在文件中做的最后一次修改是在什么位置?切换到正常模式,输入 g; 来即可切换到上次修改的位置。

  1. 移动到文件顶部或底部

当需要移动到文件顶部或底部时,通过 j 或 k 来一行行的移动显得有点麻烦。Vim 提供了一个快捷键可直接实现此功能。切换到正常模式,输入 gg 返回文件顶部,输入 G 返回文件底部。

三、案例详解

接下来,我们来完成一个稍稍复杂一点的任务,当然这个任务也将涉及到vim更加高级的一些命令。我们要完成的任务是这样的:

  1. 请在 /tmp 这个目录下建立一个名为 vimtest 的目录,进入 vimtest 这个目 录当中,将 /etc/man.config 拷贝到本目录底下,使用 vim 打开这个文本文 件;
  2. 在 vim 中设定一下行号;
  3. 移动到第 58 行行首,再向右移动 30 个字符,移动到第 8 行行尾,再向左 移动 3 个单词;
  4. 移动到第一行行首,并且向下搜寻一下『 man 』这个字符串;
  5. 将 50 到 100 行之间的 man 改为 MAN,并且一个一个挑选是否需要修 改
  6. 复制 51 到 60 行这十行的内容,并且贴到最后一行之后;
  7. 删除 11 到 30 行之间的 20 行;
  8. 去第 29 行首,并且删除 15 个字符;
  9. 修改完之后,突然反悔了,要全部复原;
  10. 将这个文件另存成一个 名为 man.config.bak 的文件;
  11. 在最后一行后插入错误!未找到引用源。中所示的字样,并保存;
  12. 在不关闭 man.config.bak 的文件情况下,再次打开 man.config;
  13. 将步骤 11 中在 man.config.bak 中输入的字样的第 1 列到第 10 列拷贝并粘 贴到 man.config 中;
  14. 储存两个文件后离开 vim。

1.打开文件

[root@localhost ~]# mkdir /tmp/vimtest
[root@localhost ~]# cd /tmp/vimtest
[root@localhost ~]# cp /etc/man.config .
[root@localhost ~]# vim /tmp/vimtest/man.config

2.设置行号

用“:set nu”命令来设置行号,设置后应如下所示,

可以用“:set nonu”来取消行号设置。

3.移动

用“数字+移动方向”来进行快捷移动,如我们可以用“3j”来从当前行向下 移动 3 行,也可以用“数字+G”或者“数字+$”指定移动到某行行首或者行尾, 如我们可以用“3G”来移动到第 3 行行首。

  • 用“gg”移动到首行行首,再用“57j”移动到第 58 行行首;也可以使用“58G”直接移动到第 58 行行首;
  • 用“40l”向右移动 40 个字符;
  • 用“7G”移动到第 7 行行首,用“$”移动到本行行尾,“3b”向左移动3 个单词。

vim 移动命令

命令键 命令用途
h 或 (←) 光标向左移动一个字符
j 或 (↓) 光标向下移动一个字符
k 或 (↑) 光标向上移动一个字符
l 或 (→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键(常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键(常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
0 光标移动到这一行的最前面字符处 (常用)
$ 光标移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行
M 光标移动到这个屏幕的中央那一行
L 光标移动到这个屏幕的最下方那一行
G 光标移动到这个文件的最后一行(常用)
gg 光标移动到这个文件的第一行 (常用)
< Enter> 光标向下移动 1 行(常用)
w 光标向右移动 1 个单词;到下一个单词的开头。
b 光标向左移动 1 个单词
e 到下一个单词的结尾。

NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)

其中 h、j、k、l、$、、G、w、b 均可以与数字组成组合键,如 “30j”表示向下移动 30 行,30G 表示移动到本文件的第 30 行。

在当前行上移动光标: 0 ^ $ f F t T , ;

0 → 到行头
^ → 到本行的第一个非blank字符
$ → 到行尾
g_ → 到本行最后一个不是blank字符的位置。
fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, → 到逗号前的第一个字符。逗号可以变成其它字符。
3fa → 在当前行查找第三个出现的a。
F 和 T → 和 f 和 t 一样,只不过是相反方向。
还有一个很有用的命令是 dt" → 删除所有的内容,直到遇到双引号—— "。

4.查找替换

  • 用“gg”移动到首行行首,用键入“/man”来查找“man”字符串,用 “n”和“N”来遍历所有的“man”字符串;
  • 用“:50,100s/man/MAN/gc”来用 MAN 替换 50 到 100 行之间的 man, vim 会逐个在替换前询问你是否替换。

vim 查找和替换命令

命令键 命令用途
a b
/word 从光标所在往下查找一个名为 “word” 的字符串。如要在文件内查找“man”这个字符串,就输入/man (常用)
?word 向光标所在往上查找一个名为 “word” 的字符串。
n 表示重复前一次查找。如果刚刚我们执行 /man 去向下查找“man”这个字符串,则按下 n 后,会向下继续查找下一个名为“man”的字符串“。如果是执行 ?man 的话,那么按下 n 则会向上继续查找名为“man”的字符串
N 表示“反向”执行前一次查找。 例如 /man 后,按下 N 则表示从光标处向上查找 “man” 。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间查找word1 这个字符串,并用 word2 来替代,例如在100 到 200 行之间搜寻 man 并取代为 MAN 则可以写作:“:100,200s/man/MAN/g”。(常用)
:1,$s/word1/word2/g 在整个文件中查找 word1 这个字符串,并用word2 来替代(常用)
:1,$s/word1/word2/gc 在整个文件中查找 word1 这个字符串,并用word2 来替代,且在取代前显示提示字符给使用者确认 (conform) 是否需要取代!(常用)

5.复制粘贴

  • 用“50G”来到文本的第 50 行,再用“10yy”复制 51 行到 60 行;
  • 用“G”来到文件的最后 1 行,再用“p”进行粘贴。

vim 复制和粘贴命令

命令键 命令用途
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 列,例如 20yy 则是复制20 列(常用)
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)

6. 删除

  • 用“10G”来到文本的第 10 行,再用“20dd”复制 11 行到 30-行;
  • 用“29G”来到文本的第 29 行首,再用“15x”删除 15 个字符。

vim 删除命令

命令键 命令用途
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整列(常用)
ndd n 为数字。删除光标所在的向下 n 列,例如 20dd 则是删除 20 列 (常用)

7.撤销和重复

  • 用“u”来撤销直到所有操作都被恢复(或者直接用“:e!”来恢复);

vim 撤销和重复命令

命令键 命令用途
u 撤销前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
:e! 将文件还原到最原始的状态

8.打开、保存和退出

  • 用“:w man.config.bak”将文件另存;
  • 用“i”切换到编辑模式,将错误!未找到引用源。中所示的字样输入,用“w” 保存;

vim 打开、保存和退出命令

命令键 命令用途
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若档案属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟您对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 若文件没有更动,则不储存离开,若文件已经经过更动,则储存后离开
:w [filename] 将编辑的数据储存成另一个文件(类似另存新文件)
:r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个文件。
  1. 同时编辑多个文件

vim 提供了同时编辑多个文件的功能,在 vim 后面同时可以接多个文件名, 用户来同时打开多个文件。 vim 同时提供了在多个窗口打开文件的功能,输入 “:sp 文件名”命令即可在不关闭当前文件的情况下打开新文件。

  • 可用“ZZ”先退出 vim,然后用“vim 文件名 1 文件名 2… 文件名 n” 打开多个文件,如这里可以用“vim man.config.bak man.config”同时打 开这两个文件,然后用“:n”和“:N”在这两个文件间切换。
  • 或者用“:sp man.config”直接打开此文件,并用“[ctrl]+wj”和“[ctrl]+wk”, 在这两个文件间切换。

vim 打开多个文件命令

命令键 命令用途
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 的打开的所有文件
:sp [filename] 开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。
[ctrl]+wj 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j ,则光标可移动到下方的窗口。
[ctrl]+wk 同上,不过光标移动到上面的窗口。
[ctrl]+wq 要结束下方窗口,那么利用 [ctrl]+wj 移动到下方窗口,按下 :q 即可, 也可以按下 [ctrl]+wq

10.可视模式

vim 提供了一种可视模式,按 Esc 键,然后按 Ctrl+v 就进入可视模式。可视 模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示 有– 可视 – 或–VISUAL–进入可视模式,我们就可以用前面所说的命令行模式 中的光标移动指令,可以进行文本范围的选取。

  • 切换到 man.config.bak 中;
  • 按下“ctrl+v” 进入可视模式下的区块选择模式,用光标选中要拷贝的区域(这些区域会反白);
  • 按下“y”进行拷贝;
  • 切换到 man.config 中,按“G”来到最后一行,按下“p”进行粘贴。

vim 可视模式下的选择、复制和删除命令

命令键 命令用途
v 字符选择,会将光标经过的地方反白选择
V 行选择,会将光标经过的行反白选择
[Ctrl]+v 区块选择,可以用长方形的方式选择文本
y 将反白的地方复制起来
d 将反白的地方删除掉

11.环境配置

vim 提供了环境设定功能,利用 vim 的环境设定,可以给我们的工作提供非 常大的一个帮助。vim 的环境设定参数有很多,可以在一般模式时输入:“ :set all”来查阅,这里仅列出一些平时比较常用的一些简单的设定值。

vim 的环境配置命令

命令键 命令用途
:set nu 设定行号,取消的话,就是 :set nonu
:set hlsearch 是否将搜寻的字符串反白。 默认值就是 hlsearch ,如果不想要反白,就 :set nohlsearch 。
:set autoindent autoindent 就是自动缩排, 不想要缩排就 :setnoautoindent 。
:set backup 是否自动储存备份档,一般是 nobackup 的, 如果设定backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案。
:set ruler 右下角是否显示状态列说明
:set showmode 这个则是,是否要显示 –INSERT– 之类的字眼在左下角的状态列。
:set all 显示目前所有的环境参数设定值。
:syntax (off|on) 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文字文件时,如果开头是以 # 开始,那么该行就会变成蓝色。 但是, 如果您仅是编写纯文本文件,要避免颜色对您的屏幕产生的干扰,则可以取消这个设定 :syntax off 。

12.暂时存档文件和恢复

当编辑一个文件时,在这个文件所处的目录底下就会有一个临时文件,文件 名为“编辑的文件名.swp”这是一个隐藏文件, 所有修改都会暂时存在这个文件 中。在编辑过程中,系统或者 vi 非正常关闭了,那么再重新用 vi 打开这个文件 时时,系统就会询问要回复『Recovery』。按下 ® ,就可以将数据回复到修改 过程的样子,再将 swp 文件删除。

四、搜索

  1. 輸入 / 以及尾隨的字符串可以用以在當前文件中查找該字符串。

  2. 块操作

块操作,典型的操作: 0 I– [ESC]

^ → 到行头
→ 开始块操作
→ 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。
  1. 在所有被选择的行后加上点东西:

    选中相关的行 (可使用 j 或 或是 /pattern 或是 % 等……) $ 到行最后 A, 输入字符串,按 ESC。

  2. 分屏: :split 和 vsplit.

    :split → 创建分屏 (:vsplit创建垂直分屏)

    dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。 _ (或 |) : 最大化尺寸 (| 垂直分屏)
    (或 -) : 增加尺寸

参考资料:

http://jingyan.baidu.com/article/48206aeaf07f37216ad6b3a6.html

http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538966&idx=1&sn=faa53bb0f7da8b1fc0438bcac783c3ad&scene=0#wechat_redirect

宁波城市职业技术学院 http://www.icourse163.org/course/NBCC-437004

http://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html

http://blog.csdn.net/namecyf/article/details/7787479

https://github.com/ma6174/vim/blob/master/.vimrc

http://blog.chinaunix.net/uid-26748613-id-3990741.html

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学