vim基础
普通模式
在vim中,操作 = 操作符 + 动作
。每个操作之前可以加上数字n,实现重复n次的作用。
- 操作符:
c :删除并进入插入模式。 对应change
cc : 删除整行并进入insert模式
d : 删除。对应delete
dd : 删除整行。
x : 删除。
i : 进入插入模式,在光标所在字符前插入。 对应insert
a : 进入插入模式,在光标所在字符后插入。 对应append
v, V, <C-v> :进入visual模式;visual-line 模式;visual-block 模式。
. : 重复上次的操作。
# 使用最少的按键修改,使输出的内容之间用空格分隔开。
a = b = c = 1
print(a)
print(b)
print(c)
- 动作:
h j k l : 分别对应 ← ↓ ↑ →
w e b : 分别对应 光标移动到下一个单词的开头; 到下一个单词的结尾;到上一个单词的开头。
word1 word2 word 3 word4
// 尝试使用 2w, 3e, 4b, dw, cw
$ 0 : 分别对应 光标所在行的最后一列、 第一列
尝试使用 d$, c$
<C-a> (Ctrl + a) : 实现数字的增加
Normal 模式下, 光标停在数字 42 上,键入 4<C-a> 命令
<C-x> : 实现数字的减少
Normal 模式下, 光标停在数字 42 上,键入 2<C-x> 命令
a(around),i(inside) 操作文本对象
这种用法通常使用在修改括号中的内容。
他们两个的区别是
a(around) 操作范围包括边界
i(inside) 操作范围不包括边界
aaa bbb ccc
aaa bbb
//将光标处在第二个b上, 执行 viw,你会发现bbb 高亮。如果你执行vaw
你会发现bbb后面的空格也会高亮,如果后面没有ccc,前面的空格会高亮
对于字符串 {aaa},如果你执行va{,那么{aaa}整个都会高亮;如果你执行vi{,那么只有aaa会高亮
插入模式
命令行模式
Vim Plugins
vim-surround
Delete surroundings is ds . The next character given determines the target to delete. The exact nature of the target is explained in |surround-targets| but essentially it is the last character of a |text-object|. This mapping deletes the difference between the “i”nner object and “a”n object. This is easiest to understand with some examples:
其中,*代表光标位置
Old text | Command | New text |
---|---|---|
“Hello *world!” | ds” | Hello world! |
(123+4*56)/2 | ds) | 123+456/2 |
Yo!* |
dst | Yo! |
Change surroundings is cs . It takes two arguments, a target like with |ds|, and a replacement. cS changes surroundings, placing the surrounded text on its own line(s) like |yS|. Details about the second argument can be found below in |surround-replacements|. Once again, examples are in order.
Old text | Command | New text ~ |
---|---|---|
“Hello *world!” | cs”‘ | ‘Hello world!’ |
“Hello *world!” | cs”\ | \Hello world!\</q> |
(123+4*56)/2 | cs)] | [123+456]/2 |
(123+4*56)/2 | cs)[ | [ 123+456 ]/2 多了一个空格 |
\ Yo!*\</div> |
cst\ | \ Yo!\</p> |
cst中的t可以理解为tag。删除环绕的tag,然后用\
环绕。
As a special case, yss operates on the current line, ignoring leading whitespace.
yss
命令能够自动忽略行首的缩进,并将整行加上括号。类比yy
可以复制整行代码。
Old text Command New text ~
Hello w*orld! yssB {Hello world!}