2014-11-03 72 views
1

我想在打開文件時使用autocmd檢查某個文件是否存在。如果文件存在,我想要執行vsplit,並將vsplit緩衝區移到右側。就像:如何在vim腳本中移動緩衝區位置

function! CheckForFile() 
    let file=expand("%:p:h")."/.".expand("%:t").".x" 
    if filereadable(file) 
     execute "vs " . file 
     <C-w>L 
    endif 
endfunction 
autocmd BufReadPost * call CheckForFile() 

我不知道如何做<C-w>L部分。我得到的只是語法錯誤。

如何移動CheckForFile函數中的緩衝區?

+0

我覺得這可能是一個惱人的功能。有一些工作需要在這裏做出這個片段的工作。不是一個好的命令或映射比自動命令更好的選擇嗎?如果你死了,請看':h '和':h:rightb'。你也不必要的使用'expand()',你應該使用':normal!'來執行正常的命令。 – 2014-11-03 21:45:30

+0

是的,可能令人討厭,但我只是在某些情況下明確地打開它。 – 2014-11-03 21:59:11

+0

如何在不擴展的情況下使用它?我不能這樣做'let file =%:p:h /.%:tx',因爲這會給出語法錯誤,'let file =「%:p:h /.%:tx」'帶引號只會產生引用沒有擴展的字符串。 – 2014-11-03 22:02:08

回答

3
<C-w>L 

是正常模式命令;因此,在功能的上下文中不能使用,因爲它是。所有<C-w>正常模式命令的等效ex命令是wincmd {char},您可以在:help window-move-cursor的末尾看到。

所以正確的符號是:

wincmd L 
+1

這是這種情況的正確答案。在其他需要使用腳本中的普通模式命令的情況下,您可以使用':normal'命令。 (你也可以在這裏使用它,但是由於'wincmd'的存在,它會處於迂迴狀態)。你需要一個字面的ctrl-W,或者你可以用'exe'來使用它,並且像'exe'那樣說普通的\ L 「'(\\ '裏面的雙引號將會變成一個ctrl-W,由vimscript給你。) – 2014-11-03 22:23:36

+0

謝謝!我不知道用雙引號轉義'' – 2014-11-03 22:25:07