VIM编辑器常用命令详解

VIM编辑器

文章目录

  • VIM编辑器
    • 一、VIM常用操作命令
      • 1、命令模式常用快捷方式
      • 2、插入模式命令
      • 3、末行模式
      • 4、视图模式
    • 二、总结

一、VIM常用操作命令

1、命令模式常用快捷方式

命令:vim 文件名 打开vim编辑器对文件进行编辑

[root@bogon text1]# vim test.txt
123
456
789
ewrtyu
qewrtyu
oiuyt
szxfg
rgfb
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~ 

G 跳转到文件末尾

gg 返回文件首行

home键或者^ 跳到首字符

end键或者$ 跳到尾字符

yy 单行复制 p 将光标移动到想要粘贴位置的下一行

  • yy复制当前行
  • p粘贴到下一行
123
456
789
ewrtyu
qewrtyu
123
oiuyt
szxfg
rgfb
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
多了 1

nyy n****行复制 P 将光标移动到想要粘贴位置的上一行

  • 3yy复制当前行
  • P粘贴到上一行
123
456
789
ewrtyu
qewrtyu
123
456
789
oiuyt
szxfg
rgfb
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
多了 3

u 撤销操作,注意:进行保存且退出后无效

dd 单行删除

ndd n 行删除 (用3dd`删除包括当前行在内的3行内容)

123
456
789
ewrtyu
qewrtyu
oiuyt
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
~                                                                 
少了 3

D或者d$ 从所在行的光标处删除到末尾

(用D命令将光标qewrtyu所在字符后的wrtyu都删除)

123
456
X89
ewrtyu
qe
oiuyt
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
~    

d^ 从所在行的光标处删除到行首

r 替换某一个字符 (用r命令将光标所在字符替换为"X")

123
456
X89
ewrtyu
qewrtyu
oiuyt
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
~ 

del键 光标所在字符的后一个字符

/关键字 根据关键字查找,n:上翻;N:下翻

(使用/y关键词,用n/N`进行正向/反向查找)

123
456
789
ewrtyu
qewrtyu
oiuyt
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
~                                                                 
已查找到文件结尾,再从开头继续查找              4,1          全部

2、插入模式命令

a :进入插入模式,在当前光标的后一个字符插入

o :在当前光标的下一行插入

i :在当前光标所在字符插入,返回命令模式时会将光标迁移一个字符

A :在光标所在行的尾字符后插入

I(大写i) :在光标所在行的首字符插入

O :在当前光标的上一行插入

ESC(按键) :返回命令模式

  • o在qe下方新建行并输入文本we123456789

    123
    456
    X89
    ewrtyu
    qe
    we123456789
    oiuyt
    qazwsxedc
    rfvtgbyh
    ujmikqa
    qwdertyu
    wdcrf
    root
    boou
    bin
    cet
    sar
    lib
    ~                                                                 
    ~                                                                 
    ~  
    -- 插入 --  
    
  • oiuyt按A跳转到行尾继续输入123123

    123
    456
    X89
    ewrtyu
    qe
    we123456789
    oiuyt123123
    qazwsxedc
    rfvtgbyh
    ujmikqa
    qwdertyu
    wdcrf
    root
    boou
    bin
    cet
    sar
    lib
    ~                                                                 
    ~                                                                 
    ~                                                                 
    -- 插入 --  
    
  • qazwsxedc按I跳转到行首输入123456

123
456
X89
ewrtyu
qe
we123456789
oiuyt123123
123456qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
                                                12,5         全部

3、末行模式

:w 保存

:q 不保存退出

:wq或:x 保存退出

! 强制

:X->输入密码->:wq 设置密码并保存退出

:X->回车两次->:wq 或者 :set key=“”->:wq 取消密码

:set nu 设置行号

:set nonu 取消行号

:nohl 取消高亮

:行号 跳转到指定行

:%s/keyword/neword/

全文替换,首个匹配替换,当包含路径时,#替换/作为匹配符号

:%s/keyword/neword/g

全文替换,所有匹配替换,当包含路径时,#替换/作为匹配符号

:指定行号s/keyword/neword/

指定行替换,首个匹配替换,当包含路径时,#替换/作为匹配符号

:指定行号s/keyword/neword/g

指定行替换,所有匹配替换,当包含路径时,#替换/作为匹配符号

:起始行号,结束行号s/keyword/neword/

范围替换,首个匹配替换,当包含路径时,#替换/作为匹配符号

:起始行号,结束行号s/keyword/neword/g

范围替换,所有匹配替换,当包含路径时,#替换/作为匹配符号

  • 执行:set nu显示行号,再用:set nonu取消显示
  1 123
  2 456
  3 X89
  4 ewrtyu
  5 qe
  6 we123456789
  7 oiuyt123123
  8 123456qazwsxedc
  9 rfvtgbyh
 10 ujmikqa
 11 qwdertyu
 12 wdcrf
 13 root
 14 boou
 15 bin
 16 cet
 17 sar
 18 lib
~                                                                 
~                                                                 
~                                                                 
:set nu 
123
456
X89
ewrtyu
qe
we123456789
oiuyt123123
123456qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
~                                                                 
:set nonu  
  • 使用:10直接跳转到第10行 光标直接到第十行
  1 123
  2 456
  3 X89
  4 ewrtyu
  5 qe
  6 we123456789
  7 oiuyt123123
  8 123456qazwsxedc
  9 rfvtgbyh
 10 ujmikqa
 11 qwdertyu
 12 wdcrf
 13 root
 14 boou
 15 bin
 16 cet
 17 sar
 18 lib
~                                                                 
~                                                                 
~                                                                 
:10 
  • 对10-15行执行范围替换:把oo替换成zz
    :10,15s/oo/zz/g
  1 123
  2 456
  3 X89
  4 ewrtyu
  5 qe
  6 we123456789
  7 oiuyt123123
  8 123456qazwsxedc
  9 rfvtgbyh
 10 ujmikqa
 11 qwdertyu
 12 wdcrf
 13 rzzt
 14 bzzu
 15 bin
 16 cet
 17 sar
 18 lib
~                                                                 
~                                                                 
~                                                                 
:10,15s/oo/zz/g 
  • 执行全文替换:
    • :%s/123/aaaa/ 替换每行第一个"123"成"aaaa"
  1 aaaa
  2 456
  3 X89
  4 ewrtyu
  5 qe
  6 weaaaa456789
  7 oiuytaaaa123
  8 aaaa456qazwsxedc
  9 rfvtgbyh
 10 ujmikqa
 11 qwdertyu
 12 wdcrf
 13 rzzt
 14 bzzu
 15 bin
 16 cet
 17 sar
 18 lib
~                                                                 
~                                                                 
~   
  • :%s/123/bbbc/g 替换所有"123"成"bbbc"
  1 bbbc
  2 456
  3 X89
  4 ewrtyu
  5 qe
  6 webbbc456789
  7 oiuytbbbcbbbc
  8 bbbc456qazwsxedc
  9 rfvtgbyh
 10 ujmikqa
 11 qwdertyu
 12 wdcrf
 13 root
 14 boou
 15 bin
 16 cet
 17 sar
 18 lib
~                                                                 
~                                                                 
~                                                                 
5 次替换,共 4
  • 练习:X设置文件密码,再通过:set key=""取消密码
                                                     Warning: Using a weak encryption method; see :help 'cm'
输入密码: *
请再输入一次: *
:set key=""                                     15,1         全部
  • :w 12.tre另存为副本文件

    "12.tre" [] 18L, 120C 已写入                  15,1         全部
    
    [root@bogon text1]# ls
    12.tre  test.txt  tex11
    

4、视图模式

**命令:**v

案例:

v进入行选择模式:

  • 选中3行后按y复制 复制前三行
123
456
789
ewrtyu
qewrtyu
oiuyt
szxfg
rgfb
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar
lib
~                                                                 
~                                                                 
复制了 4
  • 移动光标后用P粘贴 在szxfg上添加复制内容按P(大写P)
123
456
789
ewrtyu
qewrtyu
oiuyt
123
456
789
szxfg
rgfb
qazwsxedc
rfvtgbyh
ujmikqa
qwdertyu
wdcrf
root
boou
bin
cet
sar

5、试图快模式

命令:

ctrl + v 进行列选中

选中要删除的“#”,按del 批量删除注释

选中要添加的列,输入 大写i ,输入#,按两次ESC 批量增加注释

案例

Ctrl+v进入列块模式:

  • 纵向选中456列字符后
  1 123
  2 456
  3 789
  4 ewrtyu
  5 qewrtyu
  6 oiuyt
  7 123
  8 456
  9 789
 10 szxfg
 11 rgfb
 12 qazwsxedc
 13 rfvtgbyh
 14 ujmikqa
 15 qwdertyu
 16 wdcrf
 17 root
 18 boou
 19 bin
 20 cet
 21 sar
-- 可视 块 -- 

d删除,删除首字符

  1 123
  2 456
  3 789
  4 wrtyu
  5 ewrtyu
  6 iuyt
  7 123
  8 456
  9 789
 10 szxfg
 11 rgfb
 12 qazwsxedc
 13 rfvtgbyh
 14 ujmikqa
 15 qwdertyu
 16 wdcrf
 17 root
 18 boou
 19 bin
 20 cet
 21 sar
  • 选中列后按I#添加注释,按两次ESC生效

  • 批量注释:

  • 用列块模式选中多行行首

  • 前十行插入#注释符

  1 #123
  2 #456
  3 #789
  4 #ewrtyu
  5 #qewrtyu
  6 #oiuyt
  7 #123
  8 #456
  9 #789
 10 #szxfg
 11 rgfb
 12 qazwsxedc
 13 rfvtgbyh
 14 ujmikqa
 15 qwdertyu
 16 wdcrf
 17 root
 18 boou
 19 bin
 20 cet
 21 sar
       
  • 再次用列块模式删除注释符,选中列后按d 删除注释符.
  1 123
  2 456
  3 789
  4 ewrtyu
  5 qewrtyu
  6 oiuyt
  7 123
  8 456
  9 789
 10 szxfg
 11 rgfb
 12 qazwsxedc
 13 rfvtgbyh
 14 ujmikqa
 15 qwdertyu
 16 wdcrf
 17 root
 18 boou
 19 bin
 20 cet
 21 sar

5、vim高级用法

:r!command

将命令结果插入文件,command命令的结果插入光标下一行

:nr! command

将命令结果插入文件,command命令的结果插入n行后

:m,n! command

使用页面内容作为输入,command以m,n之间的行作为标准输入,

标准输出会代替m,n之间的行. 注意这个操作似乎是不可用ctrl+r撤销的。要谨慎使用。

:! /bin/bash

暂时离开vim来执行命令,使用完sh后exit又可以返回vim

案例:

  • 在末行模式执行:r !date插入当前日期到光标下方
  4 ewrtyu
  5 qewrtyu
  6 oiuyt
  7 123
  8 456
  9 789
 10 szxfg
 11 rgfb
 12 qazwsxedc
 13 rfvtgbyh
 14 ujmikqa
 15 qwdertyu
 16 wdcrf
 17 root
 18 boou
 19 bin
 20 cet
 21 sar
 22 lib
 23 
 24 2025年 05月 13日 星期二 19:11:09 CST
  • :5r !ls -l将命令结果插入到第5行下方
  5 qewrtyu
  6 总用量 44
  7 -rw-r--r--. 2 root root     6 59 16:57 001.txt
  8 -rw-r--r--. 2 root root     6 59 16:57 2.txt
  9 -rw-r--r--. 1 root root    31 59 16:59 3.txt
 10 drwxr-xr-x. 2 root root    39 512 18:34 aa
 11 -rw-------. 1 root root  1698 58 02:29 anaconda-ks.cfg
 12 drwxr-xr-x. 2 root root    22 512 16:17 bb
 13 -rwxr-xr-x. 1 root root 18523 513 14:16 elousi.sh
 14 -rw-r--r--. 1 root root  1746 58 02:32 initial-setup-ks.cf    g
 15 -rw-r--r--. 1 root root   168 513 19:15 test.txt
 16 drwxr-xr-x. 3 root root    49 513 16:58 text1
 17 drwxr-xr-x. 2 root root     6 58 02:34 公共
 18 drwxr-xr-x. 2 root root     6 58 02:34 模板
 19 drwxr-xr-x. 2 root root     6 58 02:34 视频
 20 drwxr-xr-x. 2 root root     6 58 02:34 图片
 21 drwxr-xr-x. 2 root root     6 58 02:34 文档
 22 drwxr-xr-x. 2 root root     6 58 02:34 下载
 23 drwxr-xr-x. 2 root root     6 58 02:34 音乐
 24 drwxr-xr-x. 2 root root     6 58 02:34 桌面
多了 19
  • 尝试:!ls执行外部命令后返回编辑界面

在末行模式执行:!ls

请按 ENTER 或其它命令继续
001.txt  anaconda-ks.cfg  initial-setup-ks.cfg  模板  下载
2.txt    ass              test.txt              视频  音乐
3.txt    bb               text1                 图片  桌面
aa       elousi.sh        公共                  文档

请按 ENTER 或其它命令继续

执行ls

[root@bogon ~]# ls
001.txt  anaconda-ks.cfg  initial-setup-ks.cfg  模板  下载
2.txt    ass              test.txt              视频  音乐
3.txt    bb               text1                 图片  桌面
aa       elousi.sh        公共                  文档

二、总结

注意:

  1. 所有操作前建议先备份文件
  2. 谨慎使用:!command执行会修改文件内容的命令
  3. 批量操作前可用v模式确认选中范围
  4. 替换操作建议先用/确认匹配内容
  5. 涉及密码操作时注意文件权限安全

你可能感兴趣的:(编辑器,vim,linux)