有一些優秀的Vim插件用於通過鍵入部分名稱來切換到特定的file或buffer。有誰知道這樣的插件可以在打開的窗口之間快速切換嗎?按名稱切換到VIM窗口
例如,如果我有一個名爲'a.txt'的文件在另一邊,'b.txt'在另一個文件夾中,我想通過輸入文件名來切換它們(或者只是'a'或'b'增量搜索)。這對於兩個窗口來說可能不是很有用,但我通常最多打開5個窗口,所以使用正常的導航按鈕在它們之間切換可能會很痛苦。
WinWalker似乎支持這種類型的功能,但包裝在一個更大的窗口導航框架內。
有一些優秀的Vim插件用於通過鍵入部分名稱來切換到特定的file或buffer。有誰知道這樣的插件可以在打開的窗口之間快速切換嗎?按名稱切換到VIM窗口
例如,如果我有一個名爲'a.txt'的文件在另一邊,'b.txt'在另一個文件夾中,我想通過輸入文件名來切換它們(或者只是'a'或'b'增量搜索)。這對於兩個窗口來說可能不是很有用,但我通常最多打開5個窗口,所以使用正常的導航按鈕在它們之間切換可能會很痛苦。
WinWalker似乎支持這種類型的功能,但包裝在一個更大的窗口導航框架內。
我不知道如何切換到基於文件名的窗口,但我使用以下快捷方式在我的.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
密鑰。
因爲'W','S','A不需要使用' ','D'應該可以正常工作。並且使用'nnoremap':1)在操作員掛起模式下你不需要這種行爲,並且在視覺和選擇模式下可能也不需要它; 2)你不知道op沒有將'
沒錯。現在它的方式,你不需要''是窗口移動的默認值。如果OP重新映射了它,那麼他/她應該相應地進行調整。 –
abcd
2011-03-15 05:56:28
M.但是如果你在'map'之前加上'nore',那麼無論OP是否已經重映射,你都可以使用你的解決方案。而且建議調整是不好的:用這種方法你可能會得到相互依賴的地圖,因此刪除或更改其中一個地圖會導致調試失敗。 – ZyX 2011-03-15 16:47:28
我建議使用Command-T插件。它爲當前文件夾(及其子文件夾)中的文件編制索引,並允許您鍵入文件名的一部分以將其打開。在我的.vimrc中,我還添加了這個鏈接:
nnoremap <S-F12> :CommandT<CR>
這樣我按下Shift-F12並輸入文件名將其打開。
希望有所幫助。
我鏈接到原始帖子中的CommandT。這絕對是非常有幫助的(也是使我想要這個功能的一部分),但是這是爲了將文件加載到特定的緩衝區中,而不是改變到另一個現有的窗口。 – 2011-03-15 17:46:55
是的,對,但與你有什麼不同?我曾經在開始時就這麼想,但是當我問自己時,通過緩衝區列表打開緩衝區和通過文件列表打開緩衝區有什麼區別,它將打開緩衝區,因爲緩衝區已打開?不要完美主義者:-) – Rafid 2011-03-17 05:06:09
這使用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>)
奇怪的命令:'vim.command(「exe 1。\」wincmd w \「」)''。在這裏不需要做eval:'vim.command(「1wincmd w」)''。 – ZyX 2011-11-30 21:05:13
同上:'vim.command(str(i + 1)。「wincmd w」)'。你實際上做了什麼等於'執行「執行」。(i + 1)。「。\」wincmd w \「」'。看起來很奇怪,不是嗎? – ZyX 2011-11-30 21:07:13
^_ ^!哦,是的,好點。解決方案編輯,以反映@ZyX的迷人。 :) – Doug 2011-12-01 03:47:33
:b
這是否愉快,如果你有:set
switchbuf
+=useopen
(在vimrc)。它支持文件名稱completion,例如與Ctrl - D。
通過MarcWeber等人從#vim
@Aaron托馬的回答與switchbuf+=useopen
我沒有工作。實際上文檔沒有提及該設置是由:b
命令支持的。
我用下面的代碼片段:
let windowNr = bufwinnr(pattern)
if windowNr > 0
execute windowNr 'wincmd w'
endif
你真的看所有的窗口在同一時間?使用內置的':b部分文件名'可以讓你遠離,我更喜歡使用那個(實際上我使用標籤大多),而不是有太多的窗口。有時它是應該適應我們的程序,有時它是我們對他們:) – 2011-03-14 22:11:29
(不,我不知道你的問題的答案,只是想縮小一點) – 2011-03-14 22:11:47
好吧,我經常打開兩個文件同時,這些通常會分成兩部分,這樣我可以在處理另一部分時參考文件的某些部分。然後我有另一個窗口顯示我的標籤,然後是一個文件樹。 – 2011-03-14 22:47:34