熟悉几个命令,脱离鼠标依赖,VIM技能升级


如果你刚开始使用VIM,运行过vimtutor几次,是否会觉得好VIM实在太太太笨拙,简直不能理解为何它还有那么多簇拥,甚至visual studio还提供vim的插件。那其实是因为你还没有摆脱鼠标的依赖,对vim强大的命令而言,你所掌握的还是仅仅是最皮毛的而已。


如果你是初学者,可以先阅读VIM 初学与进阶的操练及个人体验


如下介绍的几个命令(命令组合)将囊括90%的工作需求,你会发现,脱离了鼠标,其实也不是那么笨拙的一件事,而你的操作,似乎更快了有没有?


第一步:牢记光标移动命令。

1.1 假设光标当前位置在i(nt)。如何使得光标移动到|所指示的位置?

| | | || | | |

//int length = strlen(other.m_data);

1.2 光标达到行末。如何使得光标反向移动到|所指示的位置?

//int length = strlen(other.m_data);

| |


命令提示:

0 ^ 2w et= f. g_ $

| | | || | | |

//int length = strlen(other.m_data);

| |

T= F.

0: 到行头

^: 到行头第一个非blank字符

$: 到行尾

g_: 到行尾最后一个非blank字符

w : 按单词移动,到下一个单词开头 (提示: N<command> 重复命令N次)

e: 按单词移动,到下一个单词结尾

f<char>: 到下一个<char>字符处

t<char>: 到下一个<char>字符前一个字符处

F/T 与f/t相同,只是反向操作。


1.3 假设光标在TODO注释行,怎样到第一行?最后一行?第N行?

你在其他位置,怎样快速跳到TODO处,下一个TODO,上一个TODO?

String & String::operate =(const String &other) {

//check if it is self-assignment

if(this == &other)

return *this;

//TODO: other things for copy

//TODO: next

}



命令提示:

gg: 到第一行

G :到最后一行

NG:到第N行 (提示: :set nu 显示行号 :set nu! 不显示行号)

/pattern: 搜索pattern的字符串 (如果有多个匹配 n 到下一个 N 到上一个)


重要提示:

很多命令可以和光标移动连用,实现对一块区域的一起操作。

<start_position><command><end_position>

例如,

0y$: 到行头,开始拷贝到本行最后一个字符。

ye: 从当前位置拷贝到本单词最后一个字符。

dt): 从当前位置删除所有内容直到遇到)。


第二步:熟悉区域选择。


2.1<action>a<object>和<action>i<object> 区域操作

action 可以是任何命令,例如d(删除),y(拷贝),v(以可视模式选择)

object 可以是w(单词),s(句子),p(段落),或者特别字符如:),}等。

Lesson 2.1 Operation on block


* <operation>a<word> <operation>i<word> : operation on a block,a word/sentence/paragraph/ or anything between ",',),},]

1. Move the cursor to below line inside helloworld.

2. Try the commands one by one and see what's the highlighted text.

vaw viw (w stands for word)

vas vis (sentence)

vap vip (paragraph)

va" vi" ("")

va] vi] ([])

3. Move the cursor back into helloword,using d(elete) and y(ank) replace v in <operation> and see what happens.

---> function( map["helloworld"] ){

---> //this is a comment

---> }


2.2 假设你有如下function,你打算全部注释掉,怎样操作?

你打算全部加上一个缩进,怎样操作?

function( map["helloworld"] ){

var a = 10;

//this is a comment

return;

}


命令提示:

^ <Ctrl-v> <Ctrl-d> I// [ESC] [ESC]

1. Move your curser to the beginning of the function. ^

2. Ctrl+v : start block selection.

3. Ctrl+d : move your cursor to select the whole function.

4. I// [ESC] : Insert '//',enter ESC to make it affects to each line

^<Ctrl-v> <Ctrl-d>


第三步:自动提示 Ctrl +p 或者 Ctrl + n


第四步:分屏 :split:vsplit


Lesson 4 Split the window

1. :split or :vsplit : split the window ^

2. Ctrl+w <dir> : dir is direction,can be hjkl or <- | | ->

v

to select working window

3. Ctrl+w q : quit the split mode

4. Ctrl+w_ or Ctrl+w| : maximize the window

5. Ctrl+w+ or Ctrl+w- : increase or decrease the size of the window


怎么样,以上命令都熟悉了后,是不是GUI编辑器里你所常用的90%的操作都可轻松在vim里面轻易实现?

(以上可以看作advancedvim的解释,advancedvim是一份模仿vimtutor所创建的进阶练习教程,可以在这里下载

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...