按名称切换到VIM窗口

时间:2011-03-14 22:04:18

标签: windows vim

通过键入部分名称,有一些优秀的Vim插件可以切换到特定的filebuffer。有没有人知道这样的插件允许在打开的窗口之间快速切换?

例如,如果我的vsplit在一侧有一个名为'a.txt'的文件而在另一侧有'b.txt',我希望能够通过输入文件名(或只是')在它们之间切换增量搜索的'或'b')。这对于两个窗口来说可能不太有用,但我经常打开多达5个窗口,因此使用普通导航按钮在它们之间切换可能会很麻烦。

WinWalker似乎支持这种类型的功能,但它包含在一个更大的窗口导航框架中。

6 个答案:

答案 0 :(得分:5)

如果你有:b switchbuf :set

+=useopen会很开心 (在你的vimrc中)。它支持文件名completion,例如使用 Ctrl - D

MarcWeber

来自#vim

答案 1 :(得分:1)

我不知道如何根据文件名切换到窗口,但我在.vimrc中使用以下快捷方式在窗口之间移动。

noremap <S-W> <C-w><Up>
noremap <S-S> <C-w><Down>
noremap <S-A> <C-w><Left>
noremap <S-D> <C-w><Right>

这些也很简单,我打开的窗户不超过4个,所以我的窗户移动距离不超过2个窗口。此外,您必须输入文件名。

我使用标准的FPS移动键,wasd在窗户之间移动,因为它对我来说很直观,而且我不必将手指移动到箭头键 - 移位时的小指和其他三个在信件上。您可以将它们更改为您认为合适的任何内容(hjkl将是一个很好的替代方案)

我更喜欢使用Shift而不是Ctrl/Alt/Option/Cmd,因为键盘之间的位置和大小不同(例如,Fn是macbook pro上最左边的,而Ctrl是完全mac键盘上最左边的那个)我在Linux上遇到vim问题而没有识别Cmd键。

答案 2 :(得分:0)

我建议使用Command-T插件。它索引当前文件夹(及其子文件夹)中的文件,并允许您键入文件名的一部分以打开它。在我的.vimrc中,我还添加了这个链接:

nnoremap <S-F12> :CommandT<CR>

这样我按Shift-F12并输入文件名将其打开。

希望有所帮助。

答案 3 :(得分:0)

这使用python api,所以你只能在vim中使用它,但我确信喜欢vim脚本的人可以很容易地转换它。

像这样使用:

:WSeek win
:WSeek READ
:WSeek README
:WSeek a.
etc.

没有自动完成我很害怕。遗憾〜

" Call using:
" :source window-swap.vim or put in plugins dir

function! WSeek(target) 
  if !has('python')
    echo "Error: this plugin requires vim with +python"
    finish
  else
python << EOF

import vim

target = vim.eval("a:target")
found = False
for i in range(0, len(vim.windows)):
  vim.command(str(i+1) + "wincmd w")
  bits = vim.current.buffer.name.split("/")
  bits = bits[-1]
  if (bits.startswith(target)):
    found = True
    break

# Go back to the start on no match
if not found:
  vim.command("1wincmd w")

EOF
  endif
endfunction 

command! -nargs=1 WSeek :call WSeek(<q-args>)

答案 4 :(得分:0)

答案 5 :(得分:0)

这是我在尝试实现同样的目标后想出的一个小功能

function! ActivateWindowByName(name)
    let l:bufid = bufnr(a:name)
    let l:winids = win_findbuf(l:bufid)
    call win_gotoid(l:winids[0])
endfunction

说明:

  • bufnr('substring-of-buffer-name')返回缓冲区编号
  • win_findbuf(buffer_number)返回使用buffer_number
  • 标识的缓冲区的窗口ID列表(与缓冲区编号不同)
  • win_gotoid(window_ID)转到使用window_ID标识的窗口,该窗口可以位于与当前窗格不同的标签页中

bufnr无法保证找到缓冲区,因此可以返回-1。在这种情况下,win_findbuf会找到一个空列表,[0]将超出范围。