Vim/Vi 常用命令

Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 —— 维基百科

首先,vim下的工作模式有三种:
命令模式、插入模式、编辑模式

  • 命令模式:缺省进入的是命令模式,插入,移动之类的命令
  • 插入模式:在此模式下可以编辑文档,就像在记事本或者word中一样
  • 编辑模式:对文本进行操作做一些额外的设置,比如为文档设置行号,替换字符串,保存退出等;编辑模式下的命令执行完之后自动就回到命令模式了
    模式之间的切换如图:

vim工作模式切换

1. 创建并打开文件:
$ vi filename
小白注意:‘$’符号不是手动输入的,命令行中会自动给

以下是各种命令,必须在命令模式下输入

2. 插入命令:

命令 含义
a 光标后 插入文本
A 行末 插入文本
i 光标前 插入文本
I 本行开始 插入文本
o 光标下 插入新行
O 光标上 插入新行

3.定位命令:

命令 含义
k、向上箭头 移动
j、向下箭头 移动
h、向左箭头 移动
l、向右箭头 移动
$ 移至 行尾
0 移至 行首
H 移至 屏幕上 第一行
M 移至 屏幕上 中间行
L 移至 屏幕上 最后一行
gg 移至 文档 第一行
G 移至 文档 最后一行
nG 移至 文档 第n行
:n 移至 文档 第n行
命令 含义 备注
:set nu 在文档中设置行号 ①nu是number缩写②:代表进入编辑模式
:set nonu 在文档中取消行号 大部分取消命令都是在设置命令前加“no”

**4.删除命令

命令 含义
x 删除光标所在 字符
nx 删除光标所在 处后n个 字符
dd 删除光标所在
ndd 删除 n行 (光标所在行为第一行)
dG 删除光标所在 行到文本末尾 的内容
D 删除光标所在 处到行尾 的内容
:n1,n2d 删除 指定范围 行,包括n1和n2行,如(:44,50d)

5. 复制和剪切

命令 含义
yy、Y 复制 当前行
nyy、nY 复制 当前行以下n行
dd 剪切 当前行(看得到的效果就是删除,看不到的是同时又拷贝到了剪切板上)
ndd 剪切 当前行以下n行
p、P 粘贴在当前光标 所在行(P)(原来内容向下移动) 或者 下一行(p)

6. 替换和取消命令

命令 含义
r 替换光标所在 字符(命令模式下,按一下r,再按想替换成的字符)
R 从光标所在处开始替换,知道按Esc键终止
u 取消上一步操作(只要没有保存过文档,这个操作就可以一直做,类似于win下的撤退键,保存之后被写入内存就没法改了)

7. 搜索替换命令

命令 含义
/string 搜索指定字符串,默认严格区别大小写
:set ic 忽略大小写
n、N 搜索指定字符串的下一个出现位置(n从上往下,N从下往上)
:%s/old/new/g 全文替换old字符串为new字符串(g代表不需要询问确认,c代表需要询问确认)
:n1,n2s/old/new/g 在一定范围(第n1行到第n2行)内替换old字符串为new字符串

**8. 保存退出命令 **

命令 含义
:wq write quit 保存后退出
shift+ZZ 等价于:wq
:wq! 权限不够时强行保存退出,只有文件所有者和管理员root才可以
:q! 不保存退出
:w 保存不退出
:w test/a.bak 另存为

9. 应用技巧

(1):r !date 把date命令的执行结果导入到当前正在编辑的文件中光标所在处
命令拆分:

  • :r /etc/issue 把这个文件的内容导入到当前正在编辑的文件中光标所在处
  • :!命令 在vi中可以执行任何命令而不需要退出vi

*(2)定义快捷键 *
:map 快捷键 触发命令

注意:下面快捷键写法p不是先按一个,再按p,有两种按法
① 先 ctrl+v ,再 ctrl+p
② ctrl+v+p

  • :map ^p I#< ESC>
    快捷键ctrl+p触发跳到行首进行插入模式(I),插入#(#),之后再退回到命令模式(< ESC>)(ESC 和 <之间没有空格,不加空格就被当成标签处理了,显示不出来,我就加了个空格,只为显示出来)

  • :map ^z [email protected]
    快捷键ctrl+z触发将[email protected]插入到光标所在处

  • :map ^B 0x
    ctrl+B触发删除行首,0是在命令模式下跳到行首,x是删除光标所在处字符

(3)连续行注释

  • :n1,n2s/^/#/g 在连续行(n1到n2)行首加上#,^代表行首
  • :n1,n2s/#//g 去掉连续行(n1到n2)的#,就是将#替换为空
  • #n1,n2s/^#//g 去掉连续行(n1到n2)行首的#
  • :n1,n2s/^////g /使用的转义符,让/符号代表它本来的意思

(4)替换
:ab mymail [email protected]
之后你输入的所有mymail都会自动变为[email protected],而之前的mymail并不会受到影响
:unab mymail [email protected]
取消这一设置

10. 永久保存
vi中在某个文档下的设置不会被保存,在你退出文档之后会被自动取消,要想保存,需要写入vi配置文件中,配置文件存放在用户宿主目录下(非root用户默认在/home/userName目录下,我们可以直接用~表示)
vi ~/.vimrc
写入配置文件时可以省略命令前面的“:”

11. 在指定目录下所有符合条件的文件中查找字符串

  • grep -Rn “origin_a_wireless_platform__t_ccmb_tag” ./code *.py

-R:包含子目录文件
-n:显示行号
origin_a_wireless_platform__t_ccmb_tag:待查找字符串
./code:查找的目录
*.py:以py结尾的文件

12. 统计字符串出现的次数
:%s/字符串//ng

13. 批量重命名文件

  • rename .htm .html 文件路径

好啦,以上命令基本上够日常操作使用

发布了44 篇原创文章 · 获赞 82 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/wenyun_kang/article/details/77148740