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 -- 模式

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

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

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

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

/pattern
假如我想用寄存器中的内容做为搜索条件,又该怎么来操作呢?我们可以这样来取得寄存器中的内容。
/<C-r>0
插入-普通模式

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

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

-- INSERT -- 模式

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

返回普通模式

按键用途
<Esc>切换到普通模式
<C-[>切换到普通模式
<C-o>切换到插入-普通模式

替换模式

R 进入替换模式

单次版本的替换模式

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

虚拟替换模式

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

单次版本的替换模式

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

可视模式

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

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

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

CTRL+S保存文件

noremap <silent> <C-S>          :update<CR>
vnoremap <silent> <C-S>         <C-C>:update<CR>
inoremap <silent> <C-S>         <C-O>:update<CR>

ALT+J/K 移动行

nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv

全选

  • ggVg 高亮
  • ggyG 全部复制

显示行呈

set nu

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值