Vim 日常使用 技巧总结

记录的比较乱,仅仅用于熟悉使用,如能给您带来一点点参考价值,这也许就是这个总结的意义所在了。

关于 Vim 的学习可以参考以下经典教程

VIM - 主帮助文件

鸟哥的 Linux 私房菜

Vim实用技巧(第2版)

这里我大多会把阅读 Vim 实用技巧的案例整理下,但这里绝对没有侵犯原著版权的意思,望悉知。

另外,这里有必要说明的一点问题就是,好多同学说,现在这么多大型 IDE 对各种语言支持的都那么好了,还有必要学习这个“老古董”么?我们可以回顾下 vi 或者 vim 的一些使用场景。

  1. 一般 unix、linux 环境必备文本编辑工具
  2. 个人对 vim 定制使之适应自己所从事行业
  3. 现在各大 IDE 都有对应 vim mode 编辑模式
  • 暂时就想到这么多,有其他的再补充

我们可以对上述几种情况做上下简单的分析。

  1. 第一种情况,这是使用unix,linux 服务器环境编辑自带编辑工具,理所当然学握好 vi 编辑技巧是很重要的。
  2. 第二种,这个对于一个已经熟悉掌握 vi 编辑技巧的人来说,有一个自己定制的 vim ,编辑开发起来我想也是得心应手了。
  3. 第三种,这个我个人认为更适合那些不太熟悉 vi 编辑技巧并且平时开发工作环境在windows操作系统环境,IDE 提供的对个人所从事的编辑语言的支持已经很好,但平时我们免不了点击更多的鼠标来操作,这样我们可以使用 IDE 提供的 vim mode 下的插件来解决这些“多余”的鼠标操作,使我们的开发效率最大化。
  • 当然,最终的选择权还是在你自己心中?不是么?对于我个人来说保持学习是一个我认为值得坚持的好习惯。

一切华丽的根本都是丛基础开始,所以打好基础是重中之重。

-- NORMAL -- 模式

操作 用途 说明
返回 normal 模式
返回normal 模式
. 重复上次修改
x 删除光标所在字符 如执行完 x 删除操作,按 . 再次执行 x 操作
dd 删除当前行
>G 增加丛当前行到文档末尾处的缩进层级 参见:practical+vim 第1章 技巧1
>> 增加当前行缩进
$ 移动光标到行尾
i 在光标所在字符前开始插入
a 在光标所在字符后开始插入
$a; 在行尾添加分号
0 移动光标到行首,空格也算
移动光标到当前行,行首,不包含空格
b 移动光标到当前单词首部
:n 跳转到指定的第 n
ctrl+i 跳转到跳转表里第 N 个较新的项目 简单来说就是往你编辑过的地方回跳
ctrl+o 跳转到跳转表里第 N 个较旧的项目 简单来说就是一直向你最近编辑的位置跳转
f{char} 查找下一处指定字符出现的位置 参见 :h f
; ; 命令会重复查找上次 f 命令所查找的字符 参见 practical+vim 第1章 技巧3
* 匹配当前光标所在单词 将光标移动到单词上,按 * 键,光标跳转到下一匹配单词并且高亮所有单词匹配项
:%s/search/replacement/g 全局替换
另起一行,依然是normal mode
{start} db x 反向删除单词 假设光标在单词最后位置
{start} b dw 正向删除单词 先移动光标到单词开始位置,然后整个删除单词
d2w 丛当前光标向后删除两个单词,包含当前字符
2dw 丛当前光标向后删除两个单词,包含当前字符
dw 丛当前光标向后删除单个单词 可以结合 . 来使用
{start} d aw 删除整个单词 delete a word text object 参见 :h aw
[count] 对数字执行[count]次加操作 如果光标没有在数字上,则正向查找数字
[count] 对数字执行[count]次减操作 如果光标没有在数字上,则正向查找数字
进入 Visual Block 模式
h 向左移动光标
j 向下移动光标
k 向上移动光标
l 向右移动光标
zz 将当前光标所在行重新定位到屏幕中间位置
向下滚动整屏
向上滚动整屏
向下滚动半屏
向上滚动半屏
Visual Block 模式下在光标前面位置插入内容
Visual Block 模式下在光标后面位置插入内容
v 进入Visual 模式 可以用这个实现, h j k l,选中文本,y复制到寄存器,p粘贴文本
[操作符] 寄存器操作 p 会粘贴我们寄存器是复制的文本信息
反撤消
viw 选中当前单词

按单词移动

相信你已经习惯了h,j,k,l的左下上右移动光标,但是如果在一行中这么多次按hjkl也是很手疼的一件事儿。

命令 光标动作
w 正向移动到下一单词的开头
b 反向移动到当前单词/上一单词的开头
e 正向移动当前单词/下一单词的结尾
ge 反向移动到上一单词的结尾

操作符 + 动作命令 = 操作

操作符 用途
c 修改
d 删除
y 复制到寄存器
g~ 反转大小写
gu 转换为小写
gU 转换为大写
> 增加缩进
< 减小缩进
= 自动缩进
! 使用外部程序过滤{motion}所跨越的行

参见 :h operator

gU 也是操作符 参见 :h gU

操作 用途 说明
gUaw 把当前单词转换成大写形式
gUap 把整段文字转换为大写
gUgU 将当前行转换为大写
gUU 将当前行转换为大写
dap 删除整个段落

复合命令(参见 practical+vim 第1章 技巧2)

操作 用途 说明(等效长命令)
A 移动当前行光标至行尾并进入插入模式 $a
C 修改当前行上光标后面的部分,进入插入模式 c$
s 删除光标所在字符并开始插入 cl
S 删除光标所在行并开始插入 ^C
I 在光标所在行的行首开始插入 如果行首有空格则在空格之后插入 ^i
o 在光标所在行的下面另起一新行插入 A
O 在光标所在行的上面另起一行开始插入 ko

可重复操作及回退(参见 practical+vim 第1章 技巧4)

目的 操作 重复 回退
做出一个修改 {edut} . u
在行内查找下一指定字符 f{char}/t{char} ; ,
在行内查找上一指定字符 F{char}/T{char} ; ,
在文档中查找下一处匹配项 /pattern n N
在文档中查找上一处匹配项 ?pattern n N
执行替换 :s/target/replacement & u
执行一系列修改 qx{changes}q @x u

这里的{char} 或者 pattern 可以是我们手动输入的内容,也可以是我们复制到寄存器中的内容,比如我们用下面的搜索模式。

/pattern
假如我想用寄存器中的内容做为搜索条件,又该怎么来操作呢?我们可以这样来取得寄存器中的内容。
/0

插入-普通模式

在此模式中允许我们执行一个普通命令,执行完后,可以又马上返回插入模式。

zz  这个命令用于我们重绘屏幕,然后回到插入模式,不会打断我们打字。

-- INSERT -- 模式

操作 用途 说明
:w 保存当前文件修改
+ 丛外部复制粘贴到 vim 中
删除前一个字符(同空格键)
删除前一个单词
删至行首
=6*35 插入模式中做运算 210

返回普通模式

按键 用途
切换到普通模式
切换到普通模式
切换到插入-普通模式

替换模式

R 进入替换模式

单次版本的替换模式

r{char} 允许覆盖一个字符,之后马上回到普通模式

虚拟替换模式

gR 命令触发 ,建议要可能的情况下尽量使用虚拟替换模式

单次版本的替换模式

gr{char} 允许覆盖一个字符,之后马上回到普通模式

可视模式

3种可视模式,分别用于操作字符文本、行文本和块文本。**.**命令面向行操作使用较多。

命令 用途
v 激活面向字符的可视模式
V 激活面向行的可视模式
激活面向列块的可视模式
gv 重选上次的高亮选区
x 删除列

选区操作可以结合 h/j/k/l 和 w/b/e/ge 等命令来操作,如果选区选择有误可按 o 来重新选择选区活动端。

CTRL+S保存文件

noremap            :update
vnoremap           :update
inoremap           :update

ALT+J/K 移动行

nnoremap  :m .+1==
nnoremap  :m .-2==
inoremap  :m .+1==gi
inoremap  :m .-2==gi
vnoremap  :m '>+1gv=gv
vnoremap  :m '<-2gv=gv

全选

  • ggVg 高亮
  • ggyG 全部复制

显示行呈

set nu

你可能感兴趣的:(Vim 日常使用 技巧总结)