Linux 中 Vim 编辑器的使用

什么是 vim

vi 和 vim 是 Linux 中的文本编辑器。vi 是老式的文本编辑器,功能齐全,vim 可以认为是 vi 的高级版本。

为什么要学习 vim

在 Linux 中有些操作是需要在命令行中完成的,此时如果还要使用图形界面的文本编辑器,就会有些不合时宜了,所以就需要一个功能齐全的文本编辑器来完成我们的操作。从这里来看,学习 vi 和 vim 是有必要的:

  • 所有的 UNIX-like 系统都会内置 vi 文本编辑器,其它的文本编辑器则不一定会存在
  • 很多软件的编辑接口都会主动调用 vi
  • vim 具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计
  • 程序简单,编辑速度相当快速

vi 的模式说明

vi 存在三种模式,分别为一般命令模式、编辑模式和命令行模式:

  • 一般命令模式:用 vi 中打开文件时就可以进入一般命令模式。此时可以移动光标、对文件进行删除、复制和粘贴等。
  • 编辑模式:当按下(i,I,o,O,a,A,r,R)中任何一个字符之后都会进入编辑模式,此时会在操作窗口左下角出现(INSERT)和(REPLACE)。在此模式下,可以对文件内容做出编辑。按下(EEC)会推出编辑模式,回到一般命令模式。
  • 命令行模式:在一般命令模式下,输入(:/?)中任何一个字符之后,就进入命令行模式。此时光标会移动到最下边一行,支持对文件内容的一些全局操作,如读取、保存、替换等。

三种模式的切换为:

Linux 中 Vim 编辑器的使用_第1张图片

vim 的一般命令

一般命令模式:

移动光标

h 光标向左移动,对应于方向键
j 光标向下移动,对应于方向键
k 光标向上移动,对应于方向键
l 光标向右移动,对应于方向键
ctrl+f

屏幕向下移动一页,相当于 page down

ctrl+b 屏幕向上移动一页,相当于 page up
ctrl+d

屏幕向下移动半页

ctr+u 屏幕向上移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n+space n 为数字,光标会向后面移动 n 个字符
0/home 移动到这一行的最前面字符处
$/end 移动到这一行的最后面字符
H 光标移动到这个屏幕的最上方那一行的第一个字符
M

光标移动到这个屏幕的中央那一行的第一个字符

L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个文件的最后一行
n+G 移动到这个文件的第 n 行
gg 移动到这个文件的第一行
n+enter 光标向下移动 n 行

查找与替换

/word 从光标后开始查找名称为 word 的字符串
?word 向光标前开始查找名称为 word 的字符串
n 字母 n,重复前一个查找的操作
N 与 n 相反,为反向进行前一个查找操作
:n1,n2s/word1/word2/g

在第 n1 行与第 n2 行之间寻找字符串 word1,并将字符串替换为 word2

:1,$s/words/words/gc

在第一行和最后一行之间寻找字符串 word1,并将字符串替换为 word2,并提示用户确认操作

删除,复制和粘贴

x/X x 为向后删除一个字符,X为向前删除一个字符
nx

连续向后删除 n 个字符

dd 剪切光标所在的那一行
ndd 剪切光标所在的向下 n 行
d1G 剪切光标所在到第一行的所有数据
dG 剪切光标到最后一行的所有数据
d$ 剪切光标所在处到该行的最后一个字符
d0 剪切光标所在处到该行的最前面一个字符
yy 复制光标所在的那一行
nyy 复制光标所在的向下 n 行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p/P p 为将已复制的数据在光标下一行粘贴,P 为贴在光标上一行
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据
u 恢复上一个操作
ctrl+r 重做上一个操作
. 重复上一个操作

一般命令模式切换到编辑模式:

进入插入或替换的编辑模式

i/I

进入(INSERT)模式

i 为从目标光标所在处插入,I 为在目前所在行的第一个非空格符处开始插入

a/A

进入(INSERT)模式

a 为从目前光标所在的下一个字符处开始插入,A 为从光标所在处的最后一个字符处开始插入

o/O

进入(INSERT)模式

o 为在目前光标所在的下一行处插入新的一行,O 为在目前光标所在处的上一行插入新的一行

r/R

进入(REPLACE)模式

r 为替换光标所在的那一个字符一次,R 为一直替换光标所在的文字,直到 ESC 为止。

ESC 回到一般命令模式

一般命令模式切换到命令行模式:

命令行模式的保存,退出等命令:

:w 将编辑的数据写入到硬盘中
:w! 强制写入
:q 退出 vi
:q!

强制退出 vi,不保存

:wq

保存后退出

:wq! 强制保存后退出
ZZ 若文件没有没有修改,则不保存退出,若文件已经被修改过,则保存后退出
:w filename 将编辑的数据另存为一个文件
:r filename 在编辑的数据中,读入另一个文件的数据,即将 filename 内容加载到光标所在行后面
:n1,n2 w filename

将 n1 到 n2 的内容保存为 filename 这个文件

:! command

暂时退出 vi 到命令行模式下执行 command 的显示结果
:set nu 显示行号
:set nonu 取消行号

vim 的额外功能

可视区块(Visual block)

v 字符选择,会将光标经过的地方反白选择
V 行选择,会将光标经过的行反白选择
ctrl+v 可视区块,可以用矩形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除掉
p 将刚刚复制的区块,在光标所在处粘贴

可视区块的功能提供给我们了一个新的思路,对于文件内容某一区块内容的改变不需要多次的复制粘贴,按照可视即可见的思路去操作。

多文件编辑

当我们想要编辑多个文件的时候,可能会使用 vim 同时打开多个文件,此时文件的切换操作为:

:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个 vim 开启的所有文件

多窗口功能

当某个文件过长时,可能需要对照上下文进行阅读,此时可以利用多窗口功能进行相关操作,操作为:

:sp filename

有 filename 则为打开同一个文件内容,有 filename 则表示在新窗口创建一个新文件

ctrl+w+j 先按住 ctrl 不放,再按下 w 后放开所有的按键,之后再按下 j ,则光标可以移动到下方的窗口
ctrl+w+k 先按住 ctrl 不放,再按下 w 后放开所有的按键,之后再按下 k,则光标可以移动到上方的窗口
ctrl+w+q 关闭所在的窗口,等效与:q 与 :close

关键词补全

组合键 补齐的内容
ctrl+x -> ctrl+n 通过目前正在编辑的这个文件的内容文字作为关键词,补全
ctrl+x -> ctrl+f 以当前目录内的文件名作为关键词,补全
ctrl+x -> ctrl+o 以扩展名作为语法补充,以 vim 内置的关键词,补全

环境设置与记录

vim 中还存在类似 log 的操作记录,它可以主动地将你曾经做过地操作记录下来,从而能够进行轻松地操作。文件目录为 ~/.viminfo。

vim 中还存在着环境设置,有点类似于首选项或者预设,参数主要有:

:set nu

:set nonu

设置与取消行号

:set hlsearch

:set nohlsearch

hlsearch(high light search),表示是否将查找的字符串反白的设置值,默认为 hlsearch

:set autoindent

:set noautoindent

是否自动缩进
:set backup 是否自动保存备份文件,一般为 nobackup。如果设置为 backup,则意味着当你修改一个文件时,源文件会被另存为一个文件名为 filename~ 的文件。
:set ruler 是否显示状态栏右下角设置值
:set showmode 是否显示状态栏左下角设置值
:set backspace=012 设置 backspace 的功能。0 或 1 时,只能删除刚刚输入的字符。2时,可以删除任意值
:set all 显示目前所有的环境参数设置
:set 显示与系统默认值不同的设置参数,即自行变动过的设置参数

:syntax on

:syntax on

是否显示不同颜色

:set bg=dark

:set bg=light

显示不同的颜色色调,默认是 light

环境参数同样可以保存在名为 (.vimrc) 的文件中,一般放置在 /etc/vimrc 文件中。也可以新建立 ~/.vimrc 进行设置,作用是相同的,该文件中的注释符号为"。

vim 的缓存,恢复与打开时的警告

当使用 vim 进行编辑时,vim 会在被编辑文件的目录下,再建立一个名为(.filename.swp)的缓存文件。如果电脑突然掉电时,则可以用该文件还原。当打开源文件时,会被提醒警告信息:

  • O(open read-only):以只读模式打开文件
  • E(edit anyway):以正常模式打开要编辑的那个文件,并不会加载缓存的内容。
  • R(recover):加载缓存的内容
  • D(delete it):打开文件前删除缓存
  • Q(quit):直接退出 vim,不进行任何操作
  • A(abort):忽略该编辑操作,与 quit 类似。

题外话

vim 使用中还会存在许多别的问题,如编码格式,字符转换等,使用的时候需要自己慢慢探索。

参考资料

1.鸟哥的 LINUX 私房菜——基础学习篇(第四版):https://item.jd.com/12443890.html

你可能感兴趣的:(操作系统,Linux,vim,vi)