2010-04-09 11 views

Antwort

10

dachte ich einen Weg, um es zu tun. Siehe How to disable a built-in command in vim. Daraus können wir sehen, dass wir cabbrev verwenden können, um zu ändern, was ein Befehl tut. Für meine Bedürfnisse ist cabbrev e tabe perfekt.

Aber wir können diese Lösung verallgemeinern, um Befehle, die mit Kleinbuchstaben beginnen, Benutzern für benutzerdefinierte zugänglich zu machen: benutzen Sie cabbrev, um einen eingebauten Befehl als einen benutzerdefinierten zu definieren. Daher sind wir in der Lage, sowohl integrierte als auch benutzerdefinierte Befehle neu zu definieren.

Hier ist ein Beispiel, das ich zuvor erwähnte Lösung für mein Problem ist äquivalent:

:command -nargs=+ E :tabe "<args>" 
:cabbrev e E 

Das ist alles.

+0

Dies bricht, wenn Sie Folgendes eingeben möchten: 'echo e f', das stattdessen 'echo E f' wird. Meine Antwort versucht dies zu überwinden. –

1

Wie ich es verstehe, können Sie nicht. Benutzerdefinierte Befehle müssen einen Großbuchstaben haben.

:help :command 

für weitere Informationen

3

Die beste Abhilfe ohne Plugin, das ich bisher gesehen habe, ist:

cnoreabbrev <expr> e getcmdtype() == ":" && getcmdline() == 'e' ? 'tabe' : 'e' 

Wenn Sie eine einfache verwenden:

cnoreabbrev e E 

wie @Yktula vorgeschlagen Ihren Befehl brechen Wenn Sie tun möchten:

echo e f 

die würde werden:

echo E f 

statt.


Wie @pydave in den Kommentaren erklärt, fügt die cmdalias plugin eine einfachere Schnittstelle, um die sicheren alias einfach als zu tun: zu

:Alias e tabe 

Zum Zeitpunkt des Schreibens des Plugin auch verwendet die getcmdtype() == ":" Technik implementieren Sie seine Funktionalität.

+0

Sie können [cmdalias] (http://www.vim.org/scripts/script.php?script_id=746) verwenden, um das zu ": Alias ​​e tabe" zu vereinfachen und es wird die getcmdline Magie für Sie tun. – idbrii