news 2026/9/25 1:00:59

vim使用手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vim使用手册

让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /"0),回车, 就查找到了第一个匹配的单词, 并且通过 n 或 N 进行上一个或下一个的匹配。

打开文件后想跳转到上次关闭文件时的位置 '0

在选中文本中替换某个词:'<,'>s/替换项/替换为/g

/\%Vhello 在上次选中文本中搜索某个词hello

:reg 查看寄存器内容

无名寄存器("") 默认的p是调用无名寄存器

复制专用寄存器("0) 只有y才是复制寄存器

删除专用寄存器("1-"9) 调用d或x等删除操作

命名寄存器("a-"z) 可以用来放某些内容

除了esc键可以从编辑模式进入命令模式外,还可以按ctrl+[或者ctrl+c进入

"_ 黑洞寄存器,即删除不放进寄存器,如"_d

块模式下按o可以实现光标在所选块开始和结束之间跳转

i 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+<esc>就插入了36个+组成的分割线。

:sy on和:sy clear 语法高亮/取消

:colorscheme evening 设置背景颜色

替换命令的 源字符串 部分,用于指定搜索目标,要在替换命令的源字符串部分匹配行尾,需要使用 \n;

替换命令的 目标字符串 部分,用于指定要替换出的目标,如果要通过替换命令插入新行,需要使用 \r。

在“以下是……”前面加回车,于是 :%s/以下是/\/r&/gc

在命令行按下:后,再按一下↑可以看到历史命令

dab 删除括号和括号内容

dib 删除括号内容

:qall 关闭所有窗口,退出vim

:wall 保存所有修改过的窗口

:wqall 保存并退出

:only(ctrl-w o) 只保留当前窗口,关闭其它窗口

:close(ctrl-w c) 关闭当前窗口

:x 保存并退出

; 配合f&t使用,重复一次

, 配合f&t使用,反向重复一次

H 把光标移到屏幕最顶端一行
M 把光标移到屏幕中间一行
L 把光标移到屏幕最底端一行
+或Enter 把光标移至下一行第一个非空白字符

/xxx*xxx 匹配0到多个字符
/xxx\?xxx 匹配0到1个字符

:g/xxx/d 删除包含xxx的行

:v/xxx/d 删除不含xxx的行

:%s/xxx//gn 统计xxx个数,n表示只报告匹配的个数而不进行实际的替换

zz 将当前行移动到屏幕中央
zt 将当前行移动到屏幕顶端
zb 将当前行移动到屏幕底端

hlsearch=hls

set hls 设置高亮搜索

set nohls 取消高亮搜索

set incsearch 打开显示查找匹配过程
set noincsearch 关闭显示查找匹配过程

q{register} 开始录制宏

串行方式:5@[a-z] 宏内包含向下一个目标行进行移动的指令,如果出现错误,宏会停止执行

并行方式::normal @[a-z] 在高亮区域的每一行上并行执行宏,某一行出现错误不影响其他行

如果你只想修改包含特定关键词的行,可以用:g命令结合:normal。例如::g/function/normal @a,这会在所有包含 "function" 的行“并行”执行宏a,效果如同“筛选后批量处理”。

:g/foo/s/bar/baz/g
  • :g/foo/说:把所有包含 "foo" 的行筛选出来

  • :s/bar/baz/g说:在这些被选中的行里,把 "bar" 替换成 "baz"

gv 重选上次高亮区

gp 粘贴文本光标移到粘贴文本的最后一行,p则是粘贴不移动光标
xp 调换两个字符的顺序

匹配时 \C强制区分大小写、\c不区分大小写、\V会使得其后的模式中只有反斜杠有特殊的意义

cit 修改html标签内容

ci" 修改引号内容

ab 一对圆括号
ib 圆括号内容
aB 一对花括号
iB 花括号内容

:marks 取得所有标记的列表
m小写字母 标记(当前文件有效)
m大写字母 标记(全局有效)
'标记字母 跳到标记行首

`标记字母 跳到标记

x 删除当前光标下的字符
s 正常模式下,删除一个字符,并进入插入模式

g_ 到本行最后一个不是blank字符的位置

:put 在下一行粘贴
S 删除光标所在的行并开始插入

diw 删除单词,不包括空白字符
daw 删除单词,包括空白字符

dw 删除自当前光标至下一个word的开头

db 删除自当前光标至前一个word的开始

dw 从当前位置删除到下一个单词词首

d$(D) 删除光标之后的该行剩余部分(包括光标)

dd 删除当前行。
dG 删除当前行至文件尾的内容
dgg 删除当前行至文件头的内容

cw 会删除从光标位置到当前词结尾处的文本,并切换到插入模式

C 修改到行尾的内容
cc(S) 修改当前一整行

A 当前行行尾插入并进入插入模式

I 当前行行首插入

ctrl+r 取消撤消

d 剪切
ge 前一个单词的最后一个字符
e 这个单词的最后字符
b 这个单词的第一字符

dt{char} 删除到字符{char}之前

ctrl-y 向上滚屏(yǎng 仰头)
ctrl-e 向下滚屏(en 摁下去)
ctrl-u 向上滚动半屏(up)
ctrl-d 向下滚动半屏(down)
ctrl-b 向上滚动整屏(backward)
ctrl-f 向下滚动整屏(fordward)

所有选项只有在wrap关闭的时候才有效,set nowrap

10zl 向右滚动10个字符

10zh 向左滚动10个字符

zL/zH 向右滚动半个屏幕,向左滚动半个屏幕

zs/ze 视图滚动到最左侧/最右侧

zo 打开折行
zc 关闭折叠
ZZ 保存当前文件妆退出vim
ZQ 不保存退出,q表示放弃

vit 选中标签内的文本

>G 增加加从当前行文档末尾处的缩进层级

dap 删除一个段落
viw 选中一个单词
g~、gU、gu 大小写转换

可以用CTRL-O和CTRL-I可以跳转到较早的位置和靠后的某位置

180<C-x> 180<C-a> 减去或增上180

f[char]/t[char] 重复;回退

:/<html>/,/<\/html>/d 删除<html>到</html>的行

:@ 重复ex命令 @@ 重复上次命令

vim普通模式下按Q进入ex

ex命令模式下按:vi进入vim

ex命令模式下按:i 进入文字插入模式, 按Ctrl+C 退回到命令模式(这一点不同于vim的ESC)

: =显示总行数

: . =显示当前行号

: /pattern/=显示地一个与模式pattern想匹配的行号

:3, 18 d删除3~18行

:11, 15 m 23把11~15行移动到23行下面。

:23, 29 co 100复制23~29行并把它们粘贴到100行下面

:t. :t.==yyp 但不会覆盖寄存器中的内容

:!{shell命令} 执行shell命令

d/xxx 从当前位置删除到单词xxx之前

yw yb 复制单词右侧左侧
viw 选中整个单词

重复替换是&

编辑另一个文件用命令":edit foo.txt",也可简写为":e foo.txt"

在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

ggVG 选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾
在Vim中你可以把两行合并为一行,也就是说两行之间的换行符被删除了:命令是"J"

"+y 表示从vim复制到系统剪切版,

"+p 表示从外部文件(系统剪切版)粘帖到vim,

"+d 表示剪切

"+gp 粘贴并且移动光标到粘贴内容后

0或功能键[Home] 移动到这一行的最前面字符处

$或功能键[End] 移动到这一行的最后面字符处

G 移动到这个文件的最后一行

gg 移动到这个文件的第一行,相当于1G

ddp 交换当前行和其下一行

m 创建标记
' 移动到标记的文本行首
` 移动到标记的光标位置
`` 当前文件中上次跳转动作之前的位置
`. 上次修改的地方
`^ 上次插入的地方,上次退出插入模式时光标所在的位置

gi gi==`^并且进入插入模式

"+p 等同插入模式下的<C-r>+

:marks 列示所有标记
:delmarks 删除指定标记
::delm a-zA-Z0-9 删除所有标记
:m 27 移动当前行到27行

:5,7m 21 移动move lines 5, 6 and 7 to after line 21
guu 行小写
gUU 行大写

1.多行注释:
a. 按下Ctrl + v,进入列模式;
b. 在行首选择需要注释的行;
c. 按下“I”,进入插入模式;
d. 然后输入注释符(“//”、“#”等);
e. 按下“Esc”键.


2.删除多行注释:
a. 按下Ctrl + v, 进入列模式;
b. 选定要取消的注释符;
c. 按下“x”或者“d”.

3.多行删除
1.首先在命令模式下,输入“:set nu”显示行号; 2.通过行号确定你要删除的行; 3.命令输入“:32,65d”,回车键,32-65行就被删除了,很快捷吧

打开多个文件:
一、vim还没有启动的时候:
1.在终端里输入
vim file1 file2 ... filen便可以打开所有想要打开的文件
2.vim已经启动
输入
:e file
可以再打开一个文件,并且此时vim里会显示出file文件的内容。

输入

:e .

可以查看目录文件

查看目录树的标准做法

:Ex 在当前窗口打开目录树

:Vex 在竖直分割窗口打开目录树

:Sex 在水平分割窗口打开目录树

通过按键i可以得到文件目录树的不同视图

3.同时显示多个文件:
:sp //水平切分窗口
:vs //垂直切分窗口

二、在文件之间切换:

输入:ls可查看vim打开的文件

1.文件间切换
Ctrl+6 //两文件间的切换
:bn //下一个文件
:bp //上一个文件

:bf //第一个文件

:bl //最后一个文件
:ls //列出打开的文件,带编号
:b1~n //切换至第n个文件
对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。

set hidden可以在不存在当前buffer时切换到其它buffer

:e#编号 切换至:ls中查看到的某个文件
2.在窗格间切换的方法
Ctrl+w+方向键——切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向后切换到下一个窗格中


连续的十几行到50行内的左右移动:
1. 第m行到第n行右移一个tab
:m,n>
2. 第m行到第n行左移一个tab
:m,n<

连续的I行的左右移动(I > 100):
向左:
1.移动到要处理的首行,输入ma
2.移动到要处理的尾行,输入<'a
向右,即将第二个命令中的 '<' 改为 '>'即可

比如想跳转到文本的第12行,可以执行如下命令:

(1)12gg / 12G

(2):12

(3)打开文件时输入vim +12 filename

$:移动光标到行尾 n$:移动到第n行的行尾
0(Num):移动光标到行首
^:移动光标到行首第一个非空字符上去

:s/oldword/newword
:%s/oldword/newword
:%s/oldword/newword/g

代码模式匹配补全 ctrl+n或ctrl+p

set incsearch 边查询边显示

==========================================================

ex常用编辑命令:

d(delete) 删除行

m(move) 移动行

co(copy) 复制行

t复制行,和co同义

方法1:(强烈推荐)
:9,15 copy 16 或 :9,15 co 16
由此可有:
:9,15 move 16 或 :9,15 m 16 将第9行到第15行的文本内容到第16行的后面


方法2:
光标移动到结束行,ma
光标移动到起始行,输入y'a
光标移动到需要复制的行,输入p,行前复制则输入大写P

1. vim有12个粘贴板,分别是0、1、2、...、9、a、"、+;用:reg命令可以查看各个粘贴板里的内容。在vim中简单用y只是复制到"(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容;

2. 要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了,有两点需要说明一下:
* "号粘贴板(临时粘贴板)比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容;
* +号粘贴板是系统粘贴板,用"+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p;

3. 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。

g*(g#) 此命令与* #命令相似, 只不过它不完全匹配光标所在处的单词, 而是匹配包含该单词的所有字符串.

% 本命令查找与光标所在处相匹配的反括号, 包括 () [] { }.

删除所有空白行(^是行的开始,\s*是零个或者多个空白字符;$是行尾) :g/^\s*$/d

把当前行反斜杠\替换为正斜杠/ :s/\\/\//g 或:s,\\,/,g

插入模式下 ctrl+shift+d 减少缩进,ctrl+shift+t 增加缩进

在Normal Mode下 命令>>将对当前行增加缩进,而命令<<则将对当前行减少缩进

1

2

3

4

5

6

7

8

9

10

:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab

:tabc 关闭当前的tab

:tabo 关闭所有其他的tab

:tabs 查看所有打开的tab

:tabp 前一个

:tabn 后一个

标准模式下:

gt , gT 可以直接在tab之间切换。

[n]gt 向下 转到第n个tab

[n]gT 向上转到第n个tab

:n 跳至下一个文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
:e# 回到刚才编辑的文件

gd: 跳转到局部变量的定义处;
gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
g;: 上一个修改过的地方;
g,: 下一个修改过的地方;
[[: 跳转到上一个函数块开始,需要有单独一行的{。
]]: 跳转到下一个函数块开始,需要有单独一行的{。
[]: 跳转到上一个函数块结束,需要有单独一行的}。
][: 跳转到下一个函数块结束,需要有单独一行的}。
[{: 跳转到当前块开始处;
]}: 跳转到当前块结束处;
[/: 跳转到当前注释块开始处;
]/: 跳转到当前注释块结束处;
%: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。

'] `] to the last character of the previous yanked text.
'> `> to go to the last line/character of the just yanked visual selection

when yank, '] `] To the last character of the previously changed or yanked text. {not in Vi}

While you are in Visual Selection click o. It will change position of cursor to other end of selection. Then O to jump back.

==========================================================

插入模式

<c-h> 删除前一个字符

<c-w> 删除前一个单词

<c-u> 删至行首

插入模式只专注于做一件事:输入文字 普通模式是我们大部分时间所使用的模式

<c-o> 进入插入-普通模式

插入模式下 <C-r>0 插入寄存器0的内容

===============================================================================================

google浏览器vimium插件

ctrl+n 跳转到第n个标签页
chrome vimium
f 在当前标签打开链接
F 在新标签打开链接
j,k 滚动换行
J,K 上下标签

u,d 上下翻半页

h:向左细微滚动窗口。l:向右细微滚动窗口。

zH:一直移动到左部。zL:一直移动到右部。

r 刷新页面
H,L 历史记录前进、后退
gi 聚焦到当前页面的第一个输入框,比如??栏等
gg 跳到页首
G 跳到页尾
t 打开新标签
;重复查找f{char}
, 反方向查找f{char}

x 关闭当前标签
X 恢复刚才关闭的标签
b 在当前标签打开书签
B 在新标签中打开书签
?,shift+/:打开Vimium帮助,设置。「Control + T」可以新建标签页,「Control + N」可以新建窗口
T显示当前所有的标签页,并快速切换
o Open URL, bookmark or history entry
O Open URL, bookmark or history entry in a new tab
b Open a bookmark 配合tab
B Open a bookmark in a new tab
<a-f> Open multiple links in a new tab

n:向下查找匹配内容
N:向上查找匹配内容
p:在当前标签页中打开剪切板中的链接
P:在新的标签页中打开剪切板中的链接

^ Go to previously-visited tab

<alt-f>:在当前页面打开多个链接

As I am a user of vimium, it turns out I had the capabilities already shipped with it even though I wasn't aware that it existed.

Search the starting point by: /yourSeach
Press enter.
Enable visual mode via: v, and visual mode on a line basis via Shift + V
Select text by vim navigation keys, aka: h, j, k, l, b, e, w, $ (I especially like shift + w, as it goes to the end of the next word)
Yank via y
You now can switch the context and paste the text via Ctrl+V

There also seems to be a caret mode, yet as of yet I somtimes don't see the current place of the cursor, which is why I prefer the search-first approach as of now.

Ctrl+P:Ctrl+N vim自带补全

Ctrl+] 跳到定义处,相当于ctrl+鼠标左键

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 23:59:27

tchMaterial-parser:1 个按钮把国家平台电子课本存到本地

tchMaterial-parser&#xff1a;1 个按钮把国家平台电子课本存到本地 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具&#xff0c;帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#xff0c;让您更方便地获取课本内容。 项目地…

作者头像 李华
网站建设 2026/9/24 23:58:17

小米妙享更新安装包去哪了?Windows 临时目录与清理排查指南

有没有人跟我一样&#xff0c;在电脑上点了小米妙享更新之后&#xff0c;突然钻牛角尖&#xff0c;想知道那个安装包到底下载到哪里了&#xff1f;我最近就因为这事儿折腾了一晚上。小米妙享&#xff08;也就是小米互联互通服务&#xff09;在Windows上负责手机和电脑之间的多屏…

作者头像 李华
网站建设 2026/9/24 23:58:06

DAP-seq技术解析大豆转录因子调控种子含油量的研究框架

最近我在重新整理大豆种子含油量相关的转录调控资料时&#xff0c;又刷到一篇JIPB&#xff08;Journal of Integrative Plant Biology&#xff09;上采用DAP-seq技术解析大豆转录因子调控种子含油量机制的论文。DAP-seq这几年在作物功能基因组学里的出镜率越来越高&#xff0c;…

作者头像 李华
网站建设 2026/9/24 23:57:41

ResNet人脸表情识别实战:从环境搭建到实时演示全流程指南

简介&#xff1a;基于ResNet的人脸表情识别Python期末大作业完整项目&#xff0c;面向高校学生、Python初学者或需要完成课程设计的人群。项目包含可直接运行的源代码、配套图像数据集与详细说明文档&#xff0c;源码已通过本地编译调试&#xff0c;评审分数达到95分以上&#…

作者头像 李华
网站建设 2026/9/24 23:57:09

从三副本到纠删码:分布式存储容量与可靠性的实战迁移指南

做存储运维这几年&#xff0c;我见过太多团队在处理“数据备份”这件事时&#xff0c;第一反应就是不停复制。明明买了一柜子硬盘&#xff0c;用三副本把每份数据存三遍&#xff0c;结果可用容量直接缩水三分之二&#xff1b;等真要恢复数据时&#xff0c;还可能撞上副本之间互…

作者头像 李华
网站建设 2026/9/24 23:56:19

Python字符串格式化:%-formatting老语法原理与实战避坑

写Python这么多年&#xff0c;我发现自己最常被问到的不是那些花哨的框架用法&#xff0c;反而是最基础的字符串格式化问题。尤其是%-formatting这套老语法&#xff0c;翻老代码时避不开&#xff0c;在日志配置里躲不掉&#xff0c;甚至很多第三方库的源码里还在大量使用。很多…

作者头像 李华