2015-10-05 163 views
2

我想在打開新文件(一個不存在的空文件)時自動設置paste模式。VIM:在enew上執行自動命令

autocmd BufNewFile * :set paste 
中的vimrc

確實有vim newfile:e newfile的伎倆,但與:enew

如何在:enew上運行自動命令?

+1

你可以用'BufCreate',而不是試着去'BufNewfile'應該被觸發每次你加載一個fi沒有列出的文件。 – statox

+1

只是問。 「粘貼」模式有用嗎?我總是使用+(加號)寄存器,這是指系統剪貼板。 – dartNNN

+0

@statox:感謝但不幸的是,當我打開現有文件時,'BufCreate'也會設置粘貼模式。 –

回答

2

set paste將會有許多副作用,例如,禁用縮進。我會想象所要求的行爲會很快變得煩人。

替代方案:

  • 使用'pastetoggle'設置設置一鍵切換'paste'
  • unimpaired.vimyo的映射,使Vim處於插入模式'paste'集和禁用'paste'在離開插入模式
  • vim-bracketed-paste可以透明地粘貼到某些終端的Vim中。

如需更多幫助,請參見:

:h 'paste' 
:h 'pastetoggle' 
+0

我很高興當我完成粘貼時關閉'粘貼'(或者在極少數情況下我會寫一個文件從頭開始),但我仍然希望它是空緩衝區的默認值,因爲我很少從頭開始編寫一個文件,並且通常打開一個新緩衝區只是爲了對我的某些內容進行快速編輯剪貼板,但我會看看這些插件,謝謝:) –

0

要回答這個問題,下面就對:enew運行自動命令:

autocmd BufCreate * if '' == expand("<afile>") | set paste | endif 

你可以用BufAddBufNew更換BufCreate,它會工作都一樣。重要的部分是if '' == expand("<afile>"),如果新緩衝區沒有名稱,它將只執行該命令。

NB:

粘貼文本在新的緩衝區的具體使用情況,自動切換到paste模式是不是一個很好的解決方案,雖然,我不建議使用此。

由於paste即使在切換緩衝區時也會保留。當您切換緩衝區/窗口時,您需要額外的自動命令來取消設置paste模式(autocmd WinEnter * set nopaste可用於Windows,但由於某些原因,autocmd BufEnter * set nopaste在切換緩衝區時不起作用)。

爲了緩解在新的緩衝區(或其他方式)粘貼的東西,我建議你可以:

  • 在正常模式下輸入"*p"+p,如使用vim的原生機制來從剪貼板寄存器粘貼,如通過@dartNNN建議(假設你是在本地機器上)
  • 使用@彼得 - rincker的答案推薦插件之一