VIM 实战笔记

本贴最后更新于 2438 天前,其中的信息可能已经时移世改

记录了《VIM 实战》中的常用指令,高级主题部分未涉及

模式

普通模式

. 重复上次修改

u 撤销

dd 删除整行

>G 当前行到文档末尾向右缩进,>> 当前行向右缩进。反之用 <

A 移动到行尾并插入 <=> $a

/pattern<CR> 文档中查找下一处匹配项

?pattern<CR> 文档中查找上一处匹配项

s 删除当前位置的字符并进入插入模式

:s/target/replacement 将当前行的 target 替换为 replacement,通过 & 重复执行

* 定位到下一个当前单词通过 :set hls 高亮,:set hls! 取消高亮(其他单词匹配指令类似)

o 在当前行的下一行插入新的一行并进入插入模式

I 定位到行首并进入插入模式

daw delete a word,删除光标所在单词。

<C-a> 当前数字加 1,<C-x> 当前数字减 1,10<C-a> 当前数字加 10

yyp 复制当前行

gUaw 当前单词大写,guaw 当前单词小写。gUU 当前行大写,guu 当前行小写,g~ 反转大小写

插入模式

<C-h> 删除前一个字符,<C-w> 删除前一个单词,<C-u> 删至行首

yt, 复制当前到逗号之前的文本到寄存器中,插入模式下通过 <C-r>0 粘贴

<C-r>=6*35<CR> 在当前位置插入计算结果,<CR> 代表回车

<C-k>12 插入二分之一,<C-k>?I 输入倒过来的问好(二合字母,可通过:digraphs 或:h digraph-table 查看)

R 插入模式进入替换模式,相当于 INSERT 键

可视模式

v 激活面向字符的可视模式,V 面向行,<C-v> 面向块,gv 重选上次高亮选区,o 在选区两端切换

Vr-- 替换当前行

列编辑实例:<C-v>jje 选中多列单词,c 删除单词,并进入插入模式,键入新单词后,返回普通模式,即可。(编辑时,只会在第一行上看到效果);<C-v>jj$A; 在多列行尾添加分号

命令行模式

:[range]delete[x] 删除指定范围内的行[到寄存器 x 中]

:[range]yank[x] 复制指定范围的行[到寄存器 x 中]

:[line]put[x] 在指定行后粘贴寄存器 x 中的内容

:[range]copy{address} 把指定范围内的行拷贝到{address}所指定的行之下

:[range]move{address} 把指定范围内的行移动到{address}所指定的行之下

:[range]join 连接指定范围内的行

:[range]normal{commands} 对指定范围内的每一行智行普通模式命令{commands}

:[range]substitute/{pattern}/{string}/[flags] 把指定范围内出现{pattern}的地方替换为{string}

:[range]global/{pattern}/[cmd] 对指定范围内匹配{pattern}的所有行,在其上执行 Ex 命令{cmd}

<C-r>{register} 把任意寄存器的内容插入到命令行

:1 跳转到首行,:$ 跳转到文件末尾

:p:print 在屏幕上打印当前行,:1p 打印行 1,:2,5p 打印 2~5 行,:.,$p 打印当前行到末行,:%p 打印所有行

:s:substitute 替换,:%s/Practical/Pragmatic/ 将每一行的第一个 Practical 替换为 Pragmatic

可以通过高亮选区指定命令范围,如先执行 2G,在执行 VG,即可选中从第 2 行到文本尾处,再按下 : 时会预先填充一个范围

可以通过模式指定范围,如 :/<html>/,/<\/html>/p ,可以通过偏移排除上下两行,如 :/<html>/+1,/<\/html>/-1p,同理可以对行号偏移,假定当前行为 2,:.,.+3 相当于 :2,5

:copy:co:t 复制,如 :6copy. 将第 6 行拷贝至当前行,t6 将当前行复制到第 6 行下方,t. 为当前行创建一个副本,类似于 yypt0 复制当前行到开头

:move:m 移动行

@: 重复执行上一次的命令

:normal 对范围内的所有行同时执行某命令,如 jVG 选中行,:'<,'>normal . 对高亮的每一行都执行 . 命令。:%normal A; 对全文的每一行后面加分号。

输入指令时,可通过 <C-d> 显示补全选项,如 :colorscheme <C-d> 可以看到当前可选的配色方案。Tab 键可以补全正确的指令,如 :edit:write 将补全当前目录中的目录或文件名,:tab 补全标签名,:set 补全设置。

<C-r><C-w> 复制光标下的单词到命令行中

命令模式下,可以通过上下键浏览历史命令

备注

  • 所有进入插入模式的命令
  • 所有定位命令

文件

管理多个文件

vim *.txt 打开多个文件。:ls 显示当前文件列表缓冲区。:bnext 跳转到下一个缓冲区,:bprev 跳转到上一个缓冲区。:bfirst 跳转到开头,:blast 跳转到结尾。通过 <C-^> 在标记为 % 的当前文件和 # 文件切换。:buffer N 直接跳转到编号为 N 的缓冲区。:buffer {bufname} 跳转到指定名称的缓冲区,可以通过 Tab 补全。:bufdo 对缓冲区列表中的所有文件执行命令。

已打开 vim 编辑器时,可以通过 :args index.html app.js 来想缓冲区中添加文件

打开及保存文件

:edit {filename} 相对于当前路径打开文件

:find {filename} 通过文件名打开文件,需要配置 path 选项, 如 :set path+=app/** 可以使得 app 目录下的文件更容易被找到

更快地移动及跳转

用动作命令在文档中移动

参考文档 :h motion.txt:h word-motions

j 向下移动一个实际行,gj 向下一个屏幕行,同理,0 跳转到行首,^ 移动到第一个空白字符,$ 移动到行尾。

w 移动到下个单词的开头,b 反向移动到上一个单词的开头,e 正向移动到下一个单词的结尾。ge 反向移动到上一个单词的结尾,WBEgE 的移动单位是字串。

f+ 当前行找到 + 并定位过去,; 查找下一个,, 上一个,F 当前行查找上一个,t{char} 移动到下一个{chart}所在之处的前一个字符上。T 反向移动到指定字符的后一个字符上。

dt. 删除当前光标到句尾所有文本,不包括句号。

v/ge<CR>hd 字符高亮,选中到 ge 单词处,向左移动光标,删除,等价于 d/ge<CR>

vi} 高亮选中{}内部的文本,不包括{},类似还有 i>i)i]i'i"it,t 表示 tag,xml 标签

a" 选中双引号括起来的文本,包括双引号,其他类似与上面 i 的用法

c{motion} 删除指定文本并切换到插入模式,如 ci" 删除双引号内的文本并进入插入模式。类似还有 dit, yit

iwiWisip 当前单词,字串,句子,段落

awaWasap 当前单词,字串,句子,段落及一个空格/空行

% 在匹配括号间跳转,可执行如下动作来修改匹配的括号(%w{London Berlin New\ York}):dt{, 删除{之前的字符,% 匹配到下一个括号,r] 用]替换,``` 跳回到上次位置, r[` 替换为[

文件间跳转

[count]G 跳转到 count 指定行

/pattern<CR> /?pattern<CR> /n /N 跳转到下一个或上一个模式出现之处

( ),跳转到上一句或下一句的开头

{ },跳转到上一段或下一段的开头

H M L 跳转到屏幕最上方、正中间、最下方

<C-]> 跳转到光标下的关键字的定义之处

‘{mark} ``{mark}` 跳转到一个位置标记

寄存器

复制与粘贴

xp 替换光标之后的两个字符,ddp 替换当前和下一行,yyp 复制当前行到下一行

"ayiw 讲当前单词复制到寄存器 a 中,"bdd 讲整行文本剪切至寄存器 b 中,"ap 粘贴来自寄存器 a 的单词,"bp 粘贴来自寄存器 b 的一整行文本。或者在命令模式下,通过 :delete c 剪切到寄存器 c,然后通过 :put c 粘贴到光标所在行之下。

执行 y{motion} 时,讲复制到专用寄存器中,可通过 "0P 粘贴

"_d{motion} 剪切至黑洞寄存器,文本将不会覆盖任何寄存器的内容,直接丢掉

"+ 系统剪切板,如果在外部用剪切或复制命令获取了文本,可以通过 "+p 获取,或者在插入模式下使用 <C-r>+,反之也可以用此讲 vim 文本中的内容复制到剪切板供外部程序使用

"= 表达式寄存器

"% 获取当前文件名

"# 获取轮换文件名

". 上次插入的文本

": 上次执行的 Ex 命令

"/ 上次查找的模式

用寄存器中的内容替换高亮选区的文本:yiw 复制一个单词,jww 跳转到下一行的第二个单词,ve 高亮选中,p 粘贴

交换两个单词:fc 定位到 c 开头的单词,de 剪切这个单词,mm 标记该处,ww 定位到下下一个单词,ve 高亮选中,p 粘贴单词,``m 返回标记位, P` 粘贴。小写为粘贴到光标之后,大写为粘贴到光标之前

  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • VSCode
    38 引用 • 55 回帖 • 1 关注

相关帖子

1 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • CaiHeYi

    (hello) 删除括号和单词命令 da(
    (hello) 只删除括号里的单词 di(

    hello 删除标签里的hello dit