Eternal Embrace

Vim Leader Key

什么是Leader Key

我也不知道,反正是个好东西就是不告诉你

我的Leader Key配置与说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
" Key Bindings
" Exit insert mode by typing fd
inoremap fd <Esc>
" Windows
map <Tab>j <C-w>j
map <Tab>k <C-w>k
map <Tab>l <C-w>l
map <Tab>h <C-w>h
map <Leader><Space> <C-w><C-w>
map <Tab>= <C-w>=
" Scroll
map <Leader>, <C-u>
map <Leader>. <C-d>
map <Leader>; <C-b>
map <Leader>' <C-f>
" Splite
nnoremap <Leader>/ <C-w>v
nnoremap <Leader>- <C-w>s
" Quit
map <Leader>x :quit<CR>
map <Leader>X :qa!<CR>
map <Leader>q :x<CR>
map <Leader>d :close<CR>
map <Leader>o :only<CR>
map <Leader>s :w<CR>
" Switch Buffers
map <Leader>[ :bp<CR>
map <Leader>] :bn<CR>
" Tab
map <Tab><Tab> :tabnew<CR>
map <Tab>[ :tabp<CR>
map <Tab>] :tabn<CR>
" Tab Jump
map <Tab><Space> gt
map <Tab>1 1gt
map <Tab>2 2gt
map <Tab>3 3gt
map <Tab>4 4gt
map <Tab>5 5gt
map <Tab>6 6gt
map <Tab>7 7gt
map <Tab>8 8gt
map <Tab>9 9gt
map <Tab>0 10gt
" Run Command
map <Leader>cv :AsyncRun vmd<CR>
map <Leader>cf :AsyncRun open .<CR>
" Cope
map <Leader>ee :botright cope<CR>
map <Leader>e. :cn<CR>
map <Leader>e, :cp<CR>
" Zoom
function! Zoom ()
" check if is the zoomed state (tabnumber > 1 && window == 1)
if tabpagenr('$') > 1 && tabpagewinnr(tabpagenr(), '$') == 1
let l:cur_winview = winsaveview()
let l:cur_bufname = bufname('')
tabclose
" restore the view
if l:cur_bufname == bufname('')
call winrestview(cur_winview)
endif
else
tab split
endif
endfunction
nmap <leader>z :call Zoom()<CR>

说明

这个配置参考了多个Leader Key配置以及Spacemacs的使用习惯,并且不需要任何插件。(鉴于我在习惯终端上用vim,而且有Spacemacs这神器,我用的vim插件很少)相信大多数熟悉vim的人都能理解这些配置的意义。以下是简要的说明。

用fd来退出编辑模式

这是Spacemacs的默认设定之一。当然你也可以改成jk甚至jj:)。即使在用中文输入法时我也能先按fd再按enter来退出编辑模式。注意:在nopaste下这个设置不起作用,主要原因就是为了防止你以后没法粘贴带有fd的文本。(笑)

用hjkl跳转窗口

我在写按键设置时的一个原则就是尽量避免Control键。其中一个重要原因就是MacBook键盘只有左边一个Control,而我也不想再装一个按键映射软件。这里特别注明的是,我用的Vim Leader Key是,,而EasyMoyion的Leader设成了Space。把这两个设置成不同的按键是因为考虑到按键磨损等问题。而且,vim需要的leader key也没有emacs那么多。鉴于没有按键提示插件,2个键的组合更方便记忆。

在这里,用Tab作为窗口跳转的前缀键是因为, j这种的确很难按,同时也有对按键磨损的考虑。

翻页

这个应该很好理解,可以通过按键位置来记忆。还是因为没有按键提示插件的原因,vim的按键设置也需要考虑到方便记忆。

分屏

这个按键设置参考了Spacemacs的习惯。

关闭

你可能会有疑问,需要给退出命令这么多键位吗?我认为这是必须的,因为不保存退出,保存并推出,只关闭窗口而不退出是明显不同的,设置三个按键可以有效避免误操作。当然,你可以根据自己需要添加或者更改这些设置。

切换缓冲区

同样,这个按键可以通过键位来记忆。

标签

用Tab来作为标签功能的前缀键,这样就能为Leader Key空出不少键位,而且也方便记忆。

运行外部命令

AsyncRun是很实用的插件,这里我只列出macOS下的open命令和用来查看Markdown文件的vmd。你可以设置自己常用的命令。

Cope

纠错功能,在此不多赘述。

Zoom

在别人的配置中找到的,可以在新标签页全屏当前窗口,很实用。但是如果打开了多个标签,行为就不是很理想。这也是我不怎么用新标签页的原因之一。