vim基本技巧笔记
各种快捷技巧
- [.] 重复操作
- [u],[C-r] 回退重做命令
- [:set hls] 高亮
- [cw] 删除从光标位置到单词结尾间的字符,并进入插入模式
- [c3w]
- [f] 行内 单字母查找?[;] 重复查找上次
f命令所查找的字符 - [s] 删除字母,并进入insert模式
- [;] 重复上次[f]命令 带到下一个目标字符上,仅仅指字符
- [:s/content/copy/g] 单行替换 content为copy
- [:%s/content/copy/g] 全局替换 content为copy
- [
o ] - [x] 删除字符
- [db] 删除光标到单词开始的字符
- [b] 移动到单词开头
- [cc] 删除行
- [dw] 删掉到单词结尾的字符 [2dw],[d2w]
- [daw] 删除一个单词
- [ C-a ],[c-x] 12[c-a] … 数字加减
- [yyp] 复制一行
- [daw],[dap],[dl]
- [gUaw] 当前单词转化为大写形式
- 一个操作符命令被连续调用两次时,它会作用于当前行
dd删除当前行,而>>缩进当前行gU命令是一种特殊情况,我们既可以用gUgU,也可以用简化版的gUU来使它作用于当前行。
- [
=6*35 ] ,插入模式下使用,计算器 - [
u{1234}] , 以字符编码输入字符,[ u00bf ] ¿,[ga],查看光标下字符的编码。- 如果
后面是一个非数字键,则插入按键代表的本身字符 :h i_CTRL-V_digit {char1}{char2} 以二合字母插入不常用字符 :h digraphs-default
- 如果
- [R] 替换模式 [gR] 虚拟替换模式
- 单次版本的替换模式及虚拟替换模式。
r{char}和gr{char}命令允许覆盖一个字符,之后马上又回到普通模式
- 单次版本的替换模式及虚拟替换模式。
<C-g>可以在可视模式及选择模式间切换viw来高亮选择这个词 进入可视模式,高亮选择v进入可视模式 o切换选定方向
:n跳转指定行- :h ex-cmd-index Ex命令 ,命令行模式命令
- Ex命令读写文件(
:edit和:write)、创建新标签页(:tabnew)、分割窗口(:split)、操作参数列表(:prev``/``:next)及缓冲区列表(:bprev``/``:bnext) :%s/replace/str:3print替换,打印第三行:4跳转到第4行先执行2G,再跟着执行VG,就会选中如下一个高亮选区VG猜测是选定下一个高亮区- normal 对选中区做指定操作
资料
一箭双雕
我们可以这样说,A 命令把两个动作($a)合并成了一次按键。不过它不是唯一一个这样的命令,很多Vim的单键命令都可以被看成两个或多个其他命令的组合。下表列出了类似的一些例子,你能找出它们之间别的共同点吗?
| 复合命令 | 等效的长命令 |
|---|---|
| C | c$ |
| s | cl |
| S | ^C |
| I | ^i |
| A | $a |
| o | A |
| O | ko |
可重复操作及如何回退
表1-1 可重复的操作及如何回退
| 目的 | 操作 | 重复 | 回退 |
|---|---|---|---|
| 做出一个修改 | {edit} | . | u |
| 在行内查找下一指定字符 | f{char}/t{char} | ; | , |
| 在行内查找上一指定字符 | F{char}/T{char} | ; | , |
| 在文档中查找下一处匹配项 | /pattern | n | N |
| 在文档中查找上一处匹配项 | ?pattern | n | N |
| 执行替换 | :s/target/replacement | & | u |
| 执行一系列修改 | qx{changes}q | @x | u |
Vim的操作符命令
表2-1 Vim的操作符命令
| 命令 | 用途 |
|---|---|
| c | 修改 |
| d | 删除 |
| y | 复制到寄存器 |
| g~ | 反转大小写 |
| gu | 转换为小写 |
| gU | 转换为大写 |
| > | 增加缩进 |
| < | 减小缩进 |
| = | 自动缩进 |
| ! | 使用外部程序过滤{motion}所跨越的行 |
激活可视模式
| 命令 | 用途 |
|---|---|
| v | 激活面向字符的可视模式 |
| V | 激活面向行的可视模式 |
| 激活面向列块的可视模式 | |
| gv | 重选上次的高亮选区 |
操作缓存区文本的Ex命令
| 命令 | 用途 |
|---|---|
| :[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} |
构建 Ex 命令的地址及范围的符号总结
| 符号 | 地址 |
|---|---|
| 1 | 文件的第一行 |
| $ | 文件的最后一行 |
| 0 | 虚拟行,位于文件第一行上方 |
| . | 光标所在行 |
| ‘m | 包含位置标记m的行 |
| ‘< | 高亮选区的起始行 |
| ‘> | 高亮选区的结束行 |
| % | 整个文件(:1,$ 的简写形式) |
vim的剪切板
vim 有 12 个剪切板,分别是 0、1、2、…、9、a、“、+;用 :reg 命令可以查看各个剪切板里的内容。在 vim 中简单用 y 命令只是复制到 “(双引号)剪切板里,同样用 p 命令粘贴的也是这个粘贴板里的内容;
默认情况下使用的双引号的剪切板,+剪切板是系统剪切板。
可视模式下,可以使用 双引号+剪切板号+y/p命令分别实现复制和粘贴功能。
对比于Ex命令:copy(简写:t)来看的区别
:copy命令不占用寄存器(这里我实际使用了git bash使用的时候,发现会占用冒号寄存器来存储命令!!!尚不明确!)
Ex命令适合远端操作,普通命令适合本地操作(可以减少移动光标的操作,不过如果不知道具体行数也不省事,首尾添加多行的情况比较喜欢用这个)
常用复制快捷命令:
yy 复制游标所在行整行
2yy 或 y2y 复制 2 行
y^ 复制至行首,或 y0
y$ 复制至行尾
yw 复制一个 word
y2w 复制两个 word
yG 复制至文件尾
y1G 复制至文件首常用剪切快捷命令:
dd 剪切游标所在行整行
d^ 剪切至行首,或 d0
d$ 剪切至行尾
dw 剪切一个 word
dG 剪切至文件尾






