Linux常用命令--vim编辑器

摘要

  • 本文介绍vim编辑器的使用方法。

  • 本文基于CentOS8(x86_64)

vim操作模式

  • vim支持很多种操作模式,常用的有三种操作模式,分别是命令(正常、普通)模式(Command Mode)、插入模式(Insert Mode)和底行模式(Last Line Mode)

  • 命令(正常、普通)模式(Command Mode)

    进入vim之后,就处于(Command Mode)之中,在该模式下可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段以及进入(Insert Mode)(Last Line Mode)

  • 插入模式(Insert Mode)

    在命令模式下输入如下字符即可切换至插入模式

    1
    2
    3
    4
    a:在光标后   A:在本行末
    i:在光标前 I:在本行开始
    o:在光标下新开一行 O:在光标上新开一行
    此时就可以在光标所在处输入字符了

    只有在(Insert Mode)下,才可以做文字输入,按 ESC 键可回到(Command Mode),该模式是我们用到的最频繁的模式

  • 底行(末行)模式(Last Line Mode)

    (Command Mode)下,输入shift + :,其实就是输入 : 即可进入(Last Line Mode)
    (Last Line Mode)下,输入命令并回车即可执行相应的操作,无论输入的命令是否执行成功都会退出(Last Line Mode)并切换回(Command Mode)
    或者输入命令后不想执行,此时可以连按两次Esc键即可切换回(Command Mode),或者按退格键直到取消:也会回到(Command Mode)
    (Last Line Mode)下,可以进行文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作

  • 要查看vim的所有操作模式,可以在命令行输入vim,然后在底行模式中输入help vim-modes命令即可。

vim语法

1
2
3
4
# fileName不存在则创建
vim fileName
# 也可以不加fileName直接打开vim编辑器,此时需要在保存时指定fileName
vim

命令(正常、普通)模式(Command Mode)相关指令

移动光标

  • vim可以直接用键盘上的上下左右键来移动光标,但正规的vim是用小写英文字母 h 、 j 、 k 、 l ,分别控制光标左、下、上、右移一格

  • gg :光标移动到第一行开始处

  • G :光标移动到最后一行开始处

  • #G : 例如,15G ,表示移动光标至第15行行首

  • $ :移动到光标所在行的行尾

  • ^ (0) :移动到光标所在行的行首

上面的比较常用

  • H : 光标移动到当前屏幕中的第一行开始处

  • L : 光标移动到当前屏幕中的最后一行开始处

  • M : 光标移动到当前屏幕中的最中间一行开始处

  • w :光标跳到下个字的开头

  • e :光标跳到下个字的字尾

  • b :光标回到上个字的开头

  • #l :光标移到相对当前光标所在处后的第#个位置,如:当前光标在本行第3个字符处,则5l表示移动到本行第8个字符处

  • ctrl + b :屏幕往后移动一页

  • ctrl + f :屏幕往前移动一页

  • ctrl + u :屏幕往后移动半页

  • ctrl + d :屏幕往前移动半页

删除文字

  • x :每按一次,删除光标所在位置的一个字符

  • dd :删除光标所在行

  • #dd :从光标所在行开始删除#行

上面的比较常用

  • #x :例如,6x 表示删除光标所在位置的后面(包含自己在内)6个字符

  • X :大写的X,每按一次,删除光标所在位置的前面一个字符

  • #X :例如,20X 表示删除光标所在位置的前面20个字符

  • dG :删除光标所在行到末尾的内容

  • D :删除光标所在处到行尾

复制

  • yy :复制光标所在行到缓冲区。

  • #yy :例如,6yy 表示拷贝从光标所在的该行往下数6行文字

  • p:将缓冲区内的字符贴到光标所在位置。注意:所有与 y 有关的复制命令都必须与 p 配合才能完成复制与粘贴功能

上面的比较常用

  • yw :将光标所在之处到字尾的字符复制到缓冲区中

  • #yw :复制#个字到缓冲区

替换

  • r :替换光标所在处的字符,一次只能替换一个字符

  • R :替换光标所到之处的字符,直到按下 ESC 键为止

不常用,直接进入插入模式修改就行

更改

  • cw :更改光标所在处的字到字尾处,标点符号或空格分隔,此时进入(Insert Mode)

  • c#w :例如,c3w 表示更改3个字,标点符号或空格分隔,此时进入(Insert Mode)

不常用,直接进入插入模式修改就行

撤销或恢复上一次操作

  • u : 如果您误执行一个命令,可以马上按下 u ,回到上一个操作,按多次u可以执行多次恢复。

  • ctrl + r : 撤销恢复,多次执行ctrl + r,可以多次撤销

底行(末行)模式(Last Line Mode)相关指令

列出或取消行号

  • set nu : 输入 set nu 后,会在文件中的每一行前面列出行号

  • set nonu : 输入 set nonu 后,会取消文件中的每一行前面列出的行号

跳到文件中的某一行

  • # : # 号表示一个数字,再冒号后输入一个数字,再按回车键就会跳到该行

查找字符

  • / + key : 先按 / 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 会往 寻找到您要的内容,循环往复。

  • ? + key1 : 先按 ? 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 n 会往 寻找到您要的内容,循环往复。

  • set ic :搜索时忽略大小写

  • set noic :搜索时区分大小写

替换,语法类似于sed的s替换

  • n1s/source/target/ :n1代表行号,替换第n1行首次出现的source为target

  • n1s/source/target/i :n1代表行号,替换第n1行首次出现的source为target,i表示不区分大小写

  • n1s/source/target/g :n1代表行号,替换第n行出现的全部source为target

  • %s/source/target/g :%代表所有行,配合g表示全文替换,将整个文档中的source替换为target

  • n1,n2s/source/target/ig :n1,n2代表行号,在n1行到n2行范围内替换指定内容,不区分大小写

  • 示例

1
2
3
4
n1,n2s/^/#/ :行首添加#
n1,n2s/^#// :去除行首#
n1,n2s/^/\/\// :行首添加//
n1,n2s/^\/\/// :去除行首//

删除,语法类似于sed的d删除

  • n1d :n1代表行号,删除指定的行

  • n1,n2d :n1,n2代表行号,删除指定范围的行

  • 1,$d :删除所有行的全部内容

保存和退出

  • w :保存修改,不退出

  • w new_filename :另存为,新的文件名称为new_filename

  • wq :保存退出

  • q! :不保存修改退出

  • wq! :强制保存修改并退出,文件是只读的时候可以使用该命令强制保存(只有文件所有者有权限这样做)

定义快捷键

  • 我们可以自己定义快捷键,以定制化一个操作,比如在当前行行首添加#

  • 语法为:map ^P I#<ESC> : 定义ctrl + p,其含义为 输入大写字母I进入插入模式,输入#字符后按Esc切换回命令模式,注意,这里定义map时填写的<ESC>是一个字符一个字符写上的,而不是去按一次Esc按键

    ^P 的 输入方法为: ctrl+v+p

  • 此时在当前vim的命令模式下,输入ctrl + p会在光标所在行的行首添加#

  • unmap ^P :取消该快捷键

  • 在底行模式下定义快捷键只对本次vim有效,退出vim就失效了,如要永久生效,可以配置到~/.vimrc

ab替换

  • ab替换可以让我们在使用vim的插入模式编辑内容时,输入指定的字符,vim会自动帮我们替换为指定的内容

  • 语法为:ab key1 key2,此时我们输入key1,会自动被vim替换为key2

    如:ab myemali hanqunfeng@xxx.com,当输入myemail+空格后,会自动替换为hanqunfeng@xxx.com

  • unab myemail :取消

  • 在底行模式下定义ab替换只对本次vim有效,退出vim就失效了,如要永久生效,可以配置到~/.vimrc

vim配置

  • 配置文件的位置

    在目录 /etc目录下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
    而在每个用户的home目录下,都可以自己建立私有的配置文件,命名为:.vimrc
    私有配置会覆盖公共配置中相同的内容,通常我们只修改私有配置文件

  • 常用配置,注释是行首双引号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
" 快捷键
map ^P I#<ESC>
" ab替换
ab myemali hanqunfeng@xxx.com
" 显示行号
set nu
" 语法高亮
syntax on
" 缩进为4
set shiftwidth=4

" 括号和引号的自动补全
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
  • 关于vim更为详细的配置请参考 vim配置