Kam*_*i81 16 vim buffer window
假设我有单个Vim选项卡显示9个缓冲区(同样分开,如表3x3).目前,从左上方窗口右下角一送,我必须按3,Ctrl+ W,J,然后3,Ctrl+ W,L.这是麻烦的,我想只能够按Ctrl+ 9转到第九窗口和Ctrl+ 3去第三窗口,等有没有简单的方法可以让我在地图Vim的这样呢?
abc*_*bcd 28
有一个比使用鼠标或硬盘运动映射更简单的解决方案; 如果窗口编号与3x3矩阵中的窗口编号不同,或者如果您决定使用少于9个窗口,它们将会中断.这是如何做:
包括以下内容.vimrc
:
let i = 1
while i <= 9
execute 'nnoremap <Leader>' . i . ' :' . i . 'wincmd w<CR>'
let i = i + 1
endwhile
Run Code Online (Sandbox Code Playgroud)
现在,您只需按下<Leader><number>
并转到所需的窗口编号即可.我不建议超越9,因为IMO,具有多个视口的实用程序遵循瑞利分布,并且在一个窗口中有太多视口很快变得无用.
如果您在窗口中显示了窗口编号,statusline
将有助于您快速确定您所在的窗口以及要访问的窗口.要做到这一点,使用这个小功能,并相应地添加它statusline
.
function! WindowNumber()
let str=tabpagewinnr(tabpagenr())
return str
endfunction
Run Code Online (Sandbox Code Playgroud)
在您的行动中看到它statusline
:
set laststatus=2
set statusline=win:%{WindowNumber()}
Run Code Online (Sandbox Code Playgroud)
请注意,以上行将取代您的statusline
.它仅用于说明目的,以显示如何调用该函数.你应该把它放在你认为合适的地方statusline
.这是我的样子:
romainl在评论中询问了我的状态行,所以这里是:
"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()}
Run Code Online (Sandbox Code Playgroud)
最后一行应该是一行(如果您的设置自动将其分成多行,请小心).我知道有很多方法可以在每个步骤中使用增量字符串连接来组织它,但是我懒得改变它.:)该GitBranch()
函数(具有其他git功能)由git.vim插件提供.还有如指出其中存在一个bug 在这里我用的是叉的bug修复.但是,我将这两个链接和博客留在这里,以表彰所有人.
此外,请注意我使用深色背景,因此如果您使用灯光方案(也适合您的口味),您可能需要改变一点颜色.
更好,更一般的答案:
使用countCtrl+wCtrl+w跳转到当前计数窗口下方/右侧的计数窗口.
例如,如果您位于3x3网格的左上角并想要跳到左下角,则使用7 Ctrl+wCtrl+w.
具体的3x3网格答案:
如果你总是使用3x3布局,你可以尝试这些映射到小键盘,它总是跳到左上角,然后从那里移动适当的数量,键盘上的键位置跳到窗口的"等效"位置屏幕上:
noremap <k7> 1<c-w><c-w>
noremap <k8> 2<c-w><c-w>
noremap <k9> 3<c-w><c-w>
noremap <k4> 4<c-w><c-w>
noremap <k5> 5<c-w><c-w>
noremap <k6> 6<c-w><c-w>
noremap <k1> 7<c-w><c-w>
noremap <k2> 8<c-w><c-w>
noremap <k3> <c-w>b
Run Code Online (Sandbox Code Playgroud)
编辑:结果cw cw自动开始在左上角.在第一个映射中需要显式1,因为cw cw没有计数在当前和先前选择的窗口之间切换.
(Ctrl-W t映射始终位于左上角的窗口,Ctrl-W b映射始终位于最右下方).
或者你可以映射每个数字以跳转到第N个窗口,所以k6将是6 cw cw,而不是试图在屏幕上布置键.
我更喜欢使用标准的vim键(jkhl).
noremap <C-J> <C-W>w
noremap <C-K> <C-W>W
noremap <C-L> <C-W>l
noremap <C-H> <C-W>h
Run Code Online (Sandbox Code Playgroud)
如果您注意到前两个地图可以顺时针或反向跳转,而不是仅仅向上或向下跳跃,那么就有一个技巧.
您也可以直接切换到任何窗口<Number><C-J>
,例如,2<C-J>
将转到第二个窗口.
归档时间: |
|
查看次数: |
10559 次 |
最近记录: |