我的终端不允许我输入Ctrl + W,因为这是关闭终端选项卡的快捷方式。

我喜欢使用拆分,但是如果不使用,我将找不到任何方法C-W。这迫使我使用制表符,因为我可以使用gtgT#gt在它们之间进行切换,其中#是数字,但是我发现它不像拆分那样方便,因为我一次只能看到一个文件的内容。 >
我的终端也不支持mouse=a,因此我也不能使用。

在没有Ctrl + W组合的情况下,如何在Vim中使用拆分?

评论

使用映射到wincmd例如,您可以映射::nmap wj:wincmd j 与CTRL-W j相同(移至下面的窗口)。 :help wincmd

@AlexKroll为什么不将其发布为答案? :-)

@Carpetsmoker我认为这个问题还不够全面。 CTRL-W j与计数器一起使用(从当前位置转到下面的第n个窗口),我的解决方案不起作用。

我通常不喜欢这样的建议,但是我会寻找另一个终端。 是一个非常有用的快捷方式(不仅在Vim的许多地方,而且在bash中)都无法使用。我很好奇终端还使用了哪些其他键绑定-?至少,我会研究一下这些参数是否可以在终端中配置。

#1 楼

您可以将<C-w>重新映射到另一个组合,例如:

:nnoremap <C-e> <C-w>


现在可以使用<C-e>,它的作用就像您按下<C-w>一样。

这将覆盖默认的<C-e>映射(向下滚动)。 Vim已经使用了键盘上的每个键,而防止这种情况的唯一方法是使用引导键,该键的作用类似于“前缀”:

:nnoremap <Leader>w <C-w>


除非您ve重新映射了<Leader>,您现在可以使用\w(彼此之后)。我实际上更喜欢这种方式,因为我不喜欢CTRL +组合键。

请参阅是什么?和
如何找出设置为什么?是否可以重新映射 ?。

评论


解决我的问题。将映射添加到我的vimrc,并进行了一些测试,没有任何问题。

–Mateon1
15年6月27日在14:16

#2 楼

实际上,我使用:wincmd比使用Ctrl + W更频繁,因为我发现键入缩写的:winc更容易。

例如,与Ctrl + W L等效的是:winc l

#3 楼

我已经在我的.vimrc中设置了以下重新映射:

nmap <C-h> <C-w>h
nmap <C-j> <C-w>j
nmap <C-k> <C-w>k
nmap <C-l> <C-w>l


现在我可以使用Ctrl+h移动到左侧窗口,使用Ctrl+l移动到右侧窗口,依此类推。从逻辑上讲,这似乎与Vim的常规导航非常吻合。

评论


请注意,在终端中映射Ctrl + h并不总是有效,因为这通常是退格键。看到这个答案和这个问题。

–马丁·图尔诺伊(Martin Tournoij)
2015年7月3日15:29



另外,您可以使用nnoremap w,因为在正常模式下返回键使用不多。这样就可以轻松地循环进行拆分。

–希望
19年3月12日在15:00

#4 楼

为了处理拆分,我使用了实际上非常方便的submode-plugin:它允许您创建新模式(如正常模式,可视模式,插入模式等的“模式”),在其中定义新的键绑定。

这样,您就不必再使用Ctrl + w,并且由于您处于新模式,所有键都可以自由绑定:不再出现诸如“该死,我找不到一个您可以使用任何常规的插件管理器来安装插件,这是我的配置,可以给您一些启发:


我创建了一个称为WindowsMode的新模式,可以在其中操作拆分:

call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')


这些行表示我以Leaderk和我通过Leader退出模式:按下Leaderk后,我按下的所有键将:


,如果我没有在此模式下为其定义映射,则不执行任何操作
执行我决定在此模式下映射它们的操作(请参阅其余答案)
如果我击中Leader则返回正常模式




一旦我进入WindowsMode,这些行就会使hjkl在Ctrl + whjkl之类的拆分中导航

" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')



我用这些行用/和!分割窗口:

" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')


q关闭拆分:

call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')



使用Ctrlhjkl移动拆分:

call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')



Vim子模式允许执行许多强大的功能,请参阅文档以获取更多详细信息。


EDIT这里介绍了Window子模式的另一种方法。我认为作者使用的方法更接近于回答这个问题:这里是用来创建新模式的,但是所有<c-w>something映射都可以在子模式下使用相同的键来使用:

" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\           'n','o','p','q','r','s','t','u','v','w','x','y','z']
  " maps lowercase, uppercase and <C-key>
  call submode#map('window', 'n', '', key, '<C-w>' . key)
  call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
  call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor

" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
  call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor


这样,所有映射<c-w>lowerCaseKey<c-w>upperCaseKey<c-w><c-Key>和映射<c-w>=_+-<>都可以在无前缀<c-w>的窗口模式下访问