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 剪切至文件尾