Sublime Text

有些时候确实VIM比普通操作要更快,特别是在录制宏并使用的时候。

除此之外其实很多IDE可以代替VIM的部分功能,甚至可视化页面使得操作更简易。

既然Sublime Text可以支持Vim1,那么完全可以了解一下

让 Sublime Text 支持 Vim

preference - settings - user

将ignored_packages 设置为空

	{
	    "color_scheme": "Packages/Color Scheme - Default/Monokai Bright.tmTheme",
	    "font_size": 13.0,
	    "ignored_packages":[]
	}

但是这样不支持Command,需要重新install一个 VintageEx 的package

注意,Sumlime下很多原生命令和Vim的命令冲突,这个可以根据需求进行取舍

Vim

编辑模式

  1. 普通模式下按下 i 进入插入模式:
  2. 插入模式下按下 Esc 进入普通模式

如果不确认在哪个模式就按两下 Esc 回到普通模式

普通模式

Hints:

  1. {char} 指任何可输入单个字符
  2. <CR>Enter 按键
  3. <C-{char}> 指按住 Ctrl 然后按下 {char} 对应的按钮

简单命令

命令码 含义 Comment
h j k l 光标左,下,上,右  
x 删除一个字符  
. 重复上次编辑行为,重复命令码之前执行的所有编辑行为 圆点符号
u 撤销  
> 增加缩进  
w
b
e
正向移动到下一单词的开头
反向移动到上一单词的开头
正向移动到下一单词的结尾
改为大写按钮后则不按照单词移动,按照字串移动
c 修改 从当前字符修改至单词末尾: cw
修改整个单词: caw
d 删除光标所在整个单词 删除整个单词: daw
删除整个段落: dap
<C-a>
对选中的数字进行加1
对选中的数字进行减一
对负数也有效
f{char} 在行内查找下一指定字符 继续查找下一个: ;
继续查找上一个: ,
/pattern<CR> 在文档中查找下一处匹配项 继续查找下一个: n
继续查找上一个: N
?pattern<CR> 在文档中查找上一处匹配项 同上
:s/target/replacement 替换 继续替换下一个: &
回退: u
替换特定行范围内的文字: {num},{num}s/old/new/
$ 行尾 单独使用可以跳到行尾,也可配合其他命令使用
r 替换 可以替换单个字符,如果选中多个字符则会换为相同长度的重复单个字符
% 跳转括号 跳转到对应括号的字符处
a 在光标之后插入文本 在行末插入文本: A

附一张 VIM键位图2

可惜图片不够清晰

Example

快速选取1

例如下面这样的文字:

	|  aaa| vaaaa
aaaa
bbbb |

如果我们要修改出左边的aaa,则可以直接双击然后修改

而若要修改右边的一团vaaaa<br>aaaa<br>bbbb ,则必须用到鼠标,运动鼠标之后还需要将手放回键盘进行编辑,这样耗费了一定时间,而使用VIM的话只需要几个按键:vt|

  1. v代表开始选择
  2. t代表直到某个特定字符
  3. |就代表这个字符

如此可以快速的选中右边的一团,最重要的是不需要操作鼠标

最重要的,如果有很多很多个这样格式的一团需要进行批量选中修改,那么VIM可以节省很多时间

快速选取2

	[^1]: [http://www.vimer.cny](http://www.vimer.cn)

例如需要选取大括号内的数据,只需要输入vi[ 即可快速选中括号内所有数据,而不用移动鼠标来进行选取

如果选取是为了修改则可以直接输ci[

之前就听说Marco Recording是个很6的功能,这次正好来体验一下3

比如有100个这样的item,要从中筛选出30个,如果用普通方法我们需要选中每个item,然后删除,如果使用普通vim,我们可以使用5dd来删除每个item,但是需要定位到item开头的cards标签才能执行,这时候macro是个很不错的Solution

	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards
	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards
	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards

宏相关命令

命令码 含义 Comment
q{char} 录制宏并保存到{char}这个变量中  
q 停止录制  
“{char}p 显示{char}变量里录制好的命令细节,会输出到光标所在位置  
{num}@{char} 执行{char}里面录制的宏命令  

这时候只需要以下几步

  1. qa : 开始录制宏并保存到变量a
  2. ?cards{Enter} : 跳转到前一个cards的位置并取消选择
  3. 5ddq : 删除5行并停止录制

然后如果想要删除特定item就只需要输入@a来调用变量a里面保存的宏命令

参考文献