如何在vim中检测窗口的位置

时间:2010-03-18 22:09:20

标签: vim winmerge

我正在尝试自定义vimdiff的映射并使它们类似于winmerge

在垂直双向分割中,我想映射alt-left <a-left>以将当前差异移动到左侧,并使用alt-right <a-right>将当前差异移动到右侧。

对于合并,我可以使用:diffg:diffp。但我需要知道我所处的分裂,以便我可以使用:diffg/:diffp

有什么方法可以让我发现我在哪个区域。 具体来说,我可以通过任何方式知道光标是左分割还是右分割

Related Question how-to-get-list-of-files-which-are-currently-being-diffed-in-vim

2 个答案:

答案 0 :(得分:1)

假设只有两个窗口,winnr()函数将为第一个窗口返回1,为第二个窗口返回2。您还可以使用winnr('$')查看有多少个窗口::echo winnr('$')

您也可以使用dpdo,然后您不需要在窗口之间跳转,并且比箭头键更容易到达。

答案 1 :(得分:1)

不是您具体问题的答案,但这里有一些不错的差异调整可能有所帮助。

"" Diff options; ignore whitespace.
set diffopt+=iwhite

我不喜欢:diffon:diffoff因为它们混乱了自动换行(在退出diff时将其打开)。所以我只设置diff,scrollbind,foldmarker和foldcolumn。

"" Diff 'd' {{{
    nmap <silent> ,dd :set diff scb fdm=diff fdc=2<CR>
    nmap <silent> ,dD :windo :set diff scb fdm=diff fdc=2<CR>
    nmap <silent> ,do :set nodiff noscb fdm=manual fdc=0<CR>
    nmap <silent> ,dO :windo :set nodiff noscb fdm=manual fdc=0<CR>
    "nmap <silent> ,dd :diffthis<CR>
    "nmap <silent> ,dD :windo :diffthis<CR>
    "nmap <silent> ,do :diffoff<CR>
    "nmap <silent> ,dO :windo :diffoff<CR>
    nmap <silent> ,du :diffupdate<CR>
"" }}}

另外,如果您还没有...,请查看用于区分目录树的DirDiff插件。