vim实用技巧学习 part one
入门使用命令
dw
删除光标下的单词
/
/the 高亮显示查找的匹配项 the
vit
<a href=" ">text</a> //当光标在a上面的时候 实用vit命令光标跳转到text上面去 高亮text并且光标在t上面
v进入可视模式
it文本对象选中<a>
标签内的文本
使用vim的出场配置
想知道vim是否是出厂配置,在启动vim的时候这样运行$vim -u NONE -N
-u NONE 让vim启动时不加载你的vimrc,你的定制就不会生效,插件也会被禁用。当vim不加载vimrc的时候,会进入 vi兼容模式,-N标识则会使能‘nocompatible’选项,防止进入vi兼容模式。
vim解决问题的方式
.命令的使用
.
命令可以让我们重复上一次的修改(查看更多:h .
)上一次的修改包括多个命令的操作
使用x
命令会删除光标下的字符,在这种情况下使用.
命令可以重复删除光标下的字符
使用u可以撤销上一次的修改(当时.
命令不能重复u
的撤销命令)
dd
命令事删除整一行
>G
增加当前行到文档结尾处的缩进层级
j
光标移至下一行
.命令是一个微型的宏(macro)
不要自我重复
对于在结尾添加;分号这个常见的操作:
$
光标移至结尾
a
进入插入模式 类似i
,Esc
退回普通模式
A
命令在当前行的结尾添加内容,不管光标在哪里,输入A就会进入插入模式,并将光标移至行尾,等于$a
其他复合命令:
复合命令 | 等效的长命令 |
---|---|
C | c |
s | cl |
S | ^c |
I | ^i |
A | $a |
o | A |
O | ko |
该复合命令都是从普通模式切换到插入模式
以退为进
在一个字符的前后各添加空格:
f字符
s空格字符空格<Esc>
;
.
#即可将当前行另一个字符的前后各加空格解释:
f字符
将光标到最近查找字符的地方;
重复上一步的f F t T命令,
反向重复上一步的f F t T命令
执行、重复、回退
当你重复操作的时候,按键过快,导致错误的时候,如何回退
可重复的操作及如何回退
目的 | 操作 | 重复 | 回退 |
---|---|---|---|
做一个修改 | {edit} | . | |
在行内查找下一个指定字符 | f{char}/t{char} | ; | , |
在行内查找上一指定字符 | F{char}/T{char} | ; | , |
在文档中查找下一处匹配项 | /Pattern | n | N |
在文档中查找上一处匹配项 | ?Pattern | n | N |
执行替换 | :s/targert/replacement | & | u |
执行一系列修改 | qx{changes}q | @x | u |
查找并手动替换
将文中所有的一个content替换为copy
:%s /content/copy/g
或者另一种方法:
:/content
#光标移到content上*
#*命令查找所有的content,该命令有两个作用
- 光标移到下一个content上
- 所有出现的content高亮显示 如果没有高亮运行:
set hls
cwcopy<Esc>
#cw 删除当前光标下的单词,自动进入插入模式n
#跳转到下一个匹配项.
#重复修改
结识.
范式
理想模式:一键移动(移动到下一个匹配项),另一键执行
vim模式
把撤销单元切成块
u
命令进行撤销最新的修改,从进入插入模式开始,知道返回普通模式为止,在此间的输入或删除的任何内容都被当成一次修改,合理使用<Esc>
,可以使撤销用于单词或者句子
所有每次有停顿的时候,就要退出插入模式,当我要继续写的时候,按A
命令即可在原来的地方继续写作
当处于插入模式,光标位于行尾,另起一行的方式是回车,但是可以使用<Esc>o
在插入模式中移动光标会重置修改状态
如果在插入模式使用了<up>
、 <down>
、<left>
、<Right>
就会产生新的撤销块
这个类似切换为普通模式然后使用h、j、k或l(左上下右)命令对光标进行移动,唯一区别是我们并没有退出插入模式。这个也对.
命令有影响
构造可重复的修改
the end is nig**h** 我的光标在h上面,我要删除nigh这个单词,以下有三种方法
反向删除
db
#删除从光标起始为到单词开头的内容,但是会原封不动留下最后一个字符‘h’- x #删除h字符
正向删除
b
#将光标移到单词的开头dw
#删除整个单词
删除整个单词
- daw #直接删除一个单词,aw文本对象,而不是动作命令(delete a word)
比较
dbx
、bdw
、daw
反向删除方案包含两步操作:db
命令删除至单词的开头,而后x
命令删除一个字符。如果我们跟着执行一次. 命令,它会重复删除一个字符( .
= = x
)。
正向删除方案也包含两步。这一次,b
只是一次普通的移动,而dw
完成修改。此时用. 命令会重复dw
,删除从光标位置下个单词开头的内容。不过因为我们刚好已经在行尾了,并没有“下一个单词”,所以在这个场景里. 命令没什么用。不过,至少它代表了一个更长点的操作(.
= = dw
)。
daw
操作不仅仅删除了该单词,它还会删除一个空格,因此光标最终会停在单词“is”的最后一个字符上。如果此时我们使用.
命令,它会重复上次删除单词的命令。这一次, . 命令会做真正有用的事情(.
= = daw
)。
用次数做简单的算术运算
很多普通模式命令都可以带一个次数前缀,这样Vim 就会尝试把该命令执行指定的次数,而不是只执行一次(见:h count)。
<C-a>
和<C-x>
命令分别对数字执行加和减操作。在不带次数执行时,它们会逐个加减,但如果带一个次数前缀,那么就可以用它们加减任意整数。例如,如果我们把光标移到字符5 上,执行10<C-a>
就会把它变成15。
当光标不在数字上,使用ctrl+a
将会在当前行正向查找数字,并跳转到那里去
.blog, .news { background-image: url(/sprite.png); }
.blog { background-position: 0px 0px }
我们要复制最后一行并且对其做两个小改动,即用“news”替换单词“blog”,以及把“0px”改为“-180px”。我们可以运行yyp 来复制此行,然后用cw 来修改第一个单词。光标在第二行的第一个字符
yyp
#复制当前一行- cW.news
<Esc>
#cW删除第一个单词直到空格结束,并且进入插入模式,输入.news 180<ctrl+x>
#自动调到第一个数字,并对其减180007使用
<ctrl +a >
其结果是010,因为vim 把0开头的数字为八进制的数字
vim实用技巧notes
吐槽以下csdn的markdown的theme简直是难看