记录的比较乱,仅仅用于熟悉使用,如能给您带来一点点参考价值,这也许就是这个总结的意义所在了。
关于 Vim 的学习可以参考以下经典教程
VIM - 主帮助文件
鸟哥的 Linux 私房菜
Vim实用技巧(第2版)
这里我大多会把阅读 Vim 实用技巧的案例整理下,但这里绝对没有侵犯原著版权的意思,望悉知。
另外,这里有必要说明的一点问题就是,好多同学说,现在这么多大型 IDE 对各种语言支持的都那么好了,还有必要学习这个“老古董”么?我们可以回顾下 vi 或者 vim 的一些使用场景。
- 一般 unix、linux 环境必备文本编辑工具
- 个人对 vim 定制使之适应自己所从事行业
- 现在各大 IDE 都有对应 vim mode 编辑模式
- 暂时就想到这么多,有其他的再补充
我们可以对上述几种情况做上下简单的分析。
- 第一种情况,这是使用unix,linux 服务器环境编辑自带编辑工具,理所当然学握好 vi 编辑技巧是很重要的。
- 第二种,这个对于一个已经熟悉掌握 vi 编辑技巧的人来说,有一个自己定制的 vim ,编辑开发起来我想也是得心应手了。
- 第三种,这个我个人认为更适合那些不太熟悉 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粘贴文本 |
寄存器操作 | 如 |
|
反撤消 | ||
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 中 | ||
删除前一个字符(同空格键) | ||
删除前一个单词 | ||
删至行首 | ||
插入模式中做运算 | 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