通过键入部分名称,有一些优秀的Vim插件可以切换到特定的file或buffer。有没有人知道这样的插件允许在打开的窗口之间快速切换?
例如,如果我的vsplit在一侧有一个名为'a.txt'的文件而在另一侧有'b.txt',我希望能够通过输入文件名(或只是')在它们之间切换增量搜索的'或'b')。这对于两个窗口来说可能不太有用,但我经常打开多达5个窗口,因此使用普通导航按钮在它们之间切换可能会很麻烦。
WinWalker似乎支持这种类型的功能,但它包含在一个更大的窗口导航框架中。
答案 0 :(得分:5)
:b
switchbuf
:set
, +=useopen
会很开心
(在你的vimrc中)。它支持文件名completion,例如使用 Ctrl - D 。
来自#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
win_gotoid(window_ID)
转到使用window_ID
标识的窗口,该窗口可以位于与当前窗格不同的标签页中 bufnr
无法保证找到缓冲区,因此可以返回-1
。在这种情况下,win_findbuf
会找到一个空列表,[0]
将超出范围。