2011-09-12 56 views
0

當我輸入:e時,MacVim會自動將其擴展爲:編輯。與此問題是,我不能放棄我的當前緩衝區:編輯!,因爲我收到一條錯誤消息說「!」是不允許的。MacVim:e擴展爲編輯和編輯!不會讓我放棄更改?

我有兩個問題:

  1. 爲什麼:編輯!工作而不是:編輯!
  2. 有沒有辦法在MacVim中禁用此自動展開功能,或者將其切換爲展開爲:編輯!而不是:編輯! ?

謝謝!

+1

我不認爲'Edit'實際上是一個命令,你有一些插件使它成爲一個嗎? –

回答

1

如果在輸入e後立即發生擴展,則可能是由於命令模式映射(即:map!, :cmap or :lmap)。如果僅在輸入e後跟一個空格(或輸入)才能擴展它,那麼它可能是一個縮寫(即:abbreviate or :cabbrev)。

通過在e之前鍵入Control‑VControl‑Q,可以暫時避免基於映射的擴展。另一個解決方法是在輸入命令行命令時輸入Control‑F(即您在:提示符處;或者在啓動命令時鍵入q:而不是:)。這將彈出命令行窗口,以便您可以通過正常/插入模式編輯您的命令(這會避免所有命令行模式映射)。

一旦再有一種方法輸入e到命令行,你可以使用:verbose找到映射來源:

:verbose cmap e 

(您必須使用命令行窗口中鍵入或者通過在每個e前輸入一個Control-V或Control-Q在命令行輸入它。)

這將向您顯示映射的定義。此外,如果它來自一個插件,那麼源將被識別爲第二行,如Last set from /path/to/some/file

檢查的縮寫有一些技巧,因爲存在用於膨脹兩次機會(打字時並且當所述命令行被解析):

:verbose cab ^Ve 

^V需要是一個實際控制-V。通常你通過輸入Control-V兩次(或Control-Q,然後是Control-V)來完成此操作。


對於Edit命令本身,它是不是一個內置的命令,所以一些插件必須定義它。很少有內置命令以大寫字母開頭,所有「用戶定義」命令都必須以一個開頭;見:help E183

您可以再次使用:verbose尋找到:Edit定義:

:verbose command Edit 

我懷疑映射/縮寫,可能來自同一個地方的命令。


可以手動禁用與:cunmap一個基於映射的膨脹和與:cunabbrev基於縮寫膨脹:

:cunmap e 
:cunabbrev ^Ve 

同樣,可能需要每個e前型控制-V或控制-Q ,並且^V必須是文字Control-V(鍵入Control-V兩次才能輸入)。

不幸的是,如果定義來自插件,則不能只將它們放入~/.vimrc,因爲在~/.vimrc之後加載了插件。您應該調查插件以查看它是否提供禁用侵入式映射的選項。有時插件會檢查:let變量以查看它們是否應啓用某些功能。也許你的問題插件有一個「旋鈕」,可以讓你告訴它不要安裝它的e - >Edit擴展。如果沒有,您可能會報告有關:Edit!無法正常工作的錯誤,並要求您禁用擴展。

+0

謝謝,這正是我需要的!真棒回答克里斯! –

0

你使用TextExpander,Typinator還是一些文本擴展工具?如果是的話,那些可能是罪魁禍首。據我所知,MacVim不會像這樣擴展文本。