(点击
上方蓝字
,快速关注我们)
译文:伯乐在线专栏作者 - Alick
英文:sheerun
如有好文章投稿,请点击 → 这里了解详情
如需转载,发送「转载」二字查看说明
1. 使用空格键做为Leader(热键)
Leader是个非常有创意的设计,通过不同按键的顺序操作可以执行各种命令,而不需要通过组合键的方式,自从使用Leader之后我就很少使用ctrl-xxx的这种组合键。
长久以来我都是使用 , 做为Leader,直到我意识到我可以使用键盘上更加好用的捷按键:空格键(
)。
let mapleader = "\
"
这个完全颠覆了我的 Vim 操作效率,我现在可以使用双手任何一个大拇指进行操作,同时其它手指可以保持在键盘的主键区。因为 Leader 相当容易使用,所以我就将各种常用的操作进行了 Leader 映射。
2. 将最常用的操作映射到 Leader 操作
我首先识别出最经常使用的操作,并将它们映射到 Leader 操作,我经常是这么使用的:
使用
o 创建一个新文件:
nnoremap
o :CtrlP
使用
w 保存文件(比 :w
明显快得多):
nnoremap
w :w
使用
p 与
y 进行剪切板拷贝、粘贴:
vmap
Leader
>
y
"
+
y
vmap
Leader
>
d
"
+
d
nmap
Leader
>
p
"
+
p
nmap
Leader
>
P
"
+
P
vmap
Leader
>
p
"
+
p
vmap
Leader
>
P
"
+
P
使用
进入 Vim 编辑模式:
nmap
V
我强烈建议你找到最常用的操作并将其映射到 Leader 。
3. 使用区域扩展功能
为插件 terryma/vim-expand-region 做按键映射:
vmap
v
Plug
>
(
expand_region_expand
)
vmap
C
-
v
>
Plug
>
(
expand_region_shrink
)
这样我就可以:
-
按一次 v 选择一个字符。
-
再按一次 v 自动扩展选择一个单词。
-
再按一次 v 自动扩展选择一段代码。
-
…
-
以此类推…
-
按
回退上一次的选择操作。
虽然 vvv 貌似比 vp 的操作更慢,但使用这种方式时,我压根就不需要考虑当前要选择哪些以及应该使用哪个组合键进行操作。
这么一来 v 把诸如 viw, vaw, vi", va", vi(, va(, vi[, va[, vi{, va{, vip, vap, vit, vat, … 这些操作都给替代了,这下你懂了吧。
4. 找到文本查找操作工具
我一直都不喜欢 Vim 中的查找和替换操作,直到我在 Vim wiki 找到了以下的配置:
vnoremap
silent
>
s
//
e
C
-
r
>=&
selection
==
'exclusive'
?
'+1'
:
''
CR
>
CR
>
:
C
-
u
>
call histdel
(
'search'
,
-
1
)
Bar
>
let
@
/=
histget
(
'search'
,
-
1
)
CR
>
gv
omap
s
:
normal
vs
CR
>
这个直接替代了我常用的操作序列:
PS: 也可以考虑使用 Vim 7.4 提供的 cgn 命令。
5. 尝试更多更棒的键盘映射
我每天都在使用这几个快捷操作键,估计这已经帮我省出了几个月时间。
自动跳转到粘贴文本的最后
使用 ppppp 进行多行多次粘贴操作
vnoremap
silent
>
y
y
`]
vnoremap
silent
>
p
p
`]
nnoremap
silent
>
p
p
`]
避免缓冲区的内容在粘贴后被覆盖
通过以下的配置可以避免缓冲区的内容被删除的文本内容所覆盖(放到~/.vimrc文件的最后)
"
vp
doesn
'
t
replace
paste
buffer
function
!
RestoreRegister
()
let
@
"
=
s
:
restore_reg
return
''
endfunction
function
!
s
:
Repl
()
let
s
:
restore_reg
=
@
"
return
"p@=RestoreRegister()
"
endfunction
vmap
silent
>
expr
>
p
sid
>
Repl
()
译注:这里没有Title,估计是作者漏了,加了个。
在文件中快速跳转
nnoremap
CR
>
G
nnoremap
BS
>
gg
快速选择粘贴的文本
noremap gV `[v`]
关闭无聊的窗口提示
map q: :q
6. 提高单元测试执行效率
我用 vim-vroom 插件以及相应的 tmux 配置来进行我的测试。
vim-room 缺省使用
r 执行测试,由于我已将 Leader 映射为
,因此我通过
r 来运行测试工具。
由于测试在 tmux 的单独窗口运行,因此我可以边看测试进展共修订我的代码。
7. 使用 Ctrl-Z 返回 Vim
我经常要在shell下执行一些命令,我通过 Ctrl-Z 挂起 Vim ,在完成 shell 命令执行之后,通过
重新回到 Vim 。
使用 fg 退回 Vim 让我觉得难受,我只想通过 Ctrl-Z 在 Vim 与 Shell 之间切换,不过我没有找到解决方法,因此我写了个在 ZSH 下完美运行的脚本:
fancy
-
ctrl
-
z
()
{
if
[[
$
#BUFFER -eq 0 ]]; then
BUFFER
=
"fg"
zle
accept
-
line
else
zle
push
-
input
zle
clear
-
screen
fi
}
zle
-
N
fancy
-
ctrl
-
z
bindkey
'^Z'
fancy
-
ctrl
-
z
如果你将上述代码放到 ~/.zshrc 文件中,你就可以在 shell 与 Vim 之间快速切换,你真值得去试试看。
8. 正确地配置 Tmux
在 OS X 下使用 Tmux 和 Vim 工具非常不方便,因为:
我花了非常多的时间去修正上述配置,具体可以见以下:
配置使用
作为 tmux 的热键
有些人习惯使用
作为热键,不过我是用这个热键回到行首,所以我这里就不细说了。使用
的方式会更好用,原因我一会再说:
unbind
C
-
b
set
-
g
prefix
C
-
Space
bind Space
send
-
prefix
使用
进入拷贝模式
设想一下,使用
就可以直接进入 Tmux 的拷贝模式有多方便。
bind Space
copy
-
mode
bind
C
-
Space
copy
-
mode
使用 y 和 reattach-to-user-namespace (基于 OSX)
在使用系统的剪切板之前,你需要先执行 brew install reattach-to-user-namespace
bind
-
key
-
t
vi
-
copy
y
copy
-
pipe
"reattach-to-user-namespace pbcopy"
使用 vim-tmux-navigator
你要使用
,
,
,
这几个快捷键在 vim 和 tmux 的各种窗口内快速切换。
同时我建议使用
l 和
j 的映射配置来进行 Tmux 窗口分割操作,这个绝对比用
% 和
| 来得快:
bind
j
split
-
window
-
v
bind
C
-
j
split
-
window
-
v
bind
l
split
-
window
-
h
bind
C
-
l
split
-
window
-
h
参看我的 tmux.conf 文件,这里有更多的干货。
9. 提高 Git 工程中 Ctrl-P 的执行效率
将下面的内容添加到你的 .vimrc 文件中(配置使用
来使用 git 或 silver 查找工具来自动补全):
let
g
:
ctrlp_use_caching
=
0
if
executable
(
'ag'
)
set
grepprg
=
ag
--
nogroup
--
nocolor
let
g
:
ctrlp_user_command
=
'ag %s -l --nocolor -g ""'
else
let
g
:
ctrlp_user_command
=
[
'.git'
,
'cd %s && git ls-files . -co --exclude-standard'
,
'find %s -type f'
]
let
g
:
ctrlp_prompt_mappings
=
{
'AcceptSelection("e")'
:
[
'
'
,
'
'
,
''
],
}
endif
我建议使用 vim-scripts/gitignore 插件。
10. 使用包管理器
neobundle.vim 是一个强大的管理 Vim 插件的工具:
NeoBundle
'Valloric/YouCompleteMe'
,
{
'build'
:
{
'mac'
:
'./install.sh'
,
},
}
NeoBundle 'rking/pry-de', {'rtp': 'vim/'}
11. 充分使用 Vim 的插件的优点
NeoBundle
'bling/vim-airline'
let
g
:
airline_theme
=
'powerlineish'
let
g
:
airline_left_sep
=
''
let
g
:
airline_right_sep
=
''
let
g
:
airline_section_z
=
''
我是个 Ruby 程序员,所以我还使用一些 Ruby 的插件:
12. 在服务器上快速配置 Vim
我经常需要服务上使用 Vim 进行配置,不幸的是 Vim 的缺省配置相当不合理。
一种方案是使用 vim-sensible 插件来生成压缩包,不过这个对我来说不够好用。我写 vimrc 的插件来对 Vim 做合理的初始化(特别是对 Ruby 开发者),这个插件配置 Vim 只使用 ~/.vimrc 作为配置文件,同时它还包含了优化的配色、包管理工具以及多种开发语言的语法着色。
这意味着我不需要手工配置服务器上的 ~/.vim 目录,而是通过以下操作就可以方便地在服务器上配置 Vim 环境:
git clone --recursive https://github.com/sheerun/vimrc.git ~/.vim
我还写了个 dotfiles (https://github.com/sheerun/dotfiles),用于快速配置我的开发环境。
思考
用好 Vim 的关键在于,你要在软件开发过程中不断发现你所遇到的 Vim 问题,并积极处理它们。
处理方法可以是在 .vimrc 中添加键盘映射,或是在 google 上查找解决方案,要不就在 IRC 上提问,或者其他方法。
你用什么方法提高了 Vim 的使用效率?
看完本文有收获?请转发分享给更多人
关注「程序员的那些事」,提升编程技能