假设我有单个Vim选项卡显示9个缓冲区(相同的分隔,如表3×3).目前,要从左上角的窗口到右下角,我必须按3,Ctrl W,J,然后按3,L.这很麻烦,我想只需要按住Ctrl 9去第九个窗口并按住Ctrl 3去第三个窗口等等.有没有什么简单的方法可以在Vim中映射这样的东西?
有一个比使用鼠标或硬盘移动映射更简单的解决方案;如果窗口编号不同于3×3矩阵的窗口编号,或者如果您决定使用少于9个窗口,则它们将会断开.就是这样:
- let i = 1
- while i <= 9
- execute 'nnoremap <Leader>' . i . ' :' . i . 'wincmd w<CR>'
- let i = i + 1
- endwhile
现在,您可以按< Leader>< number>并被带到你想要的窗口号码.我不会建议超过9,因为IMO,具有多个视口的实用程序遵循Rayleigh distribution,并且在一个窗口中太多的视口很快变得无用.
如果您的状态栏中显示窗口号码,以帮助您快速找出您要访问的窗口以及您要访问的窗口,这将会有所帮助.要做到这一点,使用这个小功能,并相应地添加到你的状态.
- function! WindowNumber()
- let str=tabpagewinnr(tabpagenr())
- return str
- endfunction
在你的状态线上看到它:
- set laststatus=2
- set statusline=win:%{WindowNumber()}
请注意,上述行将取代您的状态线.这只是为了说明的目的,显示如何调用该函数.你应该把它放在你认为适合你身份状况的地方.这是我的样子:
编辑:
- "statusline
- hi StatusLine term=bold cterm=bold ctermfg=White ctermbg=235
- hi StatusHostname term=bold cterm=bold ctermfg=107 ctermbg=235 guifg=#799d6a
- hi StatusGitBranch term=bold cterm=bold ctermfg=215 ctermbg=235 guifg=#ffb964
- function! MyGitBranchStyle()
- let branch = GitBranch()
- if branch == ''
- let branchStyle = ''
- else
- let branchStyle = 'git:' . branch
- end
- return branchStyle
- endfunction
- function! WindowNumber()
- let str=tabpagewinnr(tabpagenr())
- return str
- endfunction
- set laststatus=2
- set statusline=%#StatusLine#%F%h%m%r\ %h%w%y\ col:%c\ lin:%l\,%L\ buf:%n\ win:%{WindowNumber()}\ reg:%{v:register}\ %#StatusGitBranch#%{MyGitBranchStyle()}\ \%=%#StatusLine#%{strftime(\"%d/%m/%Y-%H:%M\")}\ %#StatusHostname#%{hostname()}
最后一行应该是单行(如果您的设置自动将其分解成多行,请小心).我知道有一些方法可以在每个步骤中使用增量的字符串连接进行组织,但我也很懒惰来改变它.