Wie führe ich einen "Lichtmodus" ein, in dem nicht alle Plugins geladen sind?

8

Meine Vim Config enthält Plugins , die versuchen , aktuelle Projekt zu handhaben , Build - Tags, etc . Dies ist sehr nützlich für meine tägliche Programmierung in Vim, aber es ist nur ärgerlich, wenn ich Vim für einige schnelle Änderungen verwende, wie zum Beispiel:

  • Bearbeiten einer Git-Commit-Nachricht;
  • Bearbeiten Sie einen Shell-Befehl, wenn ich Ctrl+xCtrl+ezsh oder bash eingebe.
  • usw.

Ich mag das auch --nopluginsnicht, da ich immer noch einige Plugins im Schnellbearbeitungsmodus nutzen möchte, wie Surround, Easy-Motion und viele andere.

Ich möchte also einen "Lichtmodus" (oder "Schnellmodus") haben, in dem einige der Plugins umgangen werden, aber nicht alle.

Meine erste Idee war, ein spezielles Kommandozeilenargument zu haben, das ich in Vimscript analysieren würde, aber schnelles Googeln zeigt, dass es derzeit in Vimscript unmöglich ist (übrigens schrecklich traurig).

Meine zweite Idee ist, beim Ausführen von vim eine Umgebungsvariable festzulegen, wie folgt:

$ VIM_LIGHT_MODE=1 vim

Dies funktioniert in Git:

$ git config --global core.editor 'VIM_LIGHT_MODE=1 vim'

Aber wenn ich das tue EDITOR='VIM_LIGHT_MODE=1 vim'und Ctrl+xCtrl+edie Shell eingebe, funktioniert es nicht:

edit-command-line:13: command not found: VIM_LIGHT_MODE=1

Dann habe ich Folgendes versucht:, EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"aber es schlägt auch fehl:

vim': -c: line 1: syntax error: unexpected end of file

(Um ehrlich zu sein, sieht dieser besonders komisch aus, es scheint, dass ich falsch verstehe, wie genau er $EDITORverwendet wird, und ich bin froh, wenn jemand erklärt, was hier vor sich geht)

Alle anderen Experimente schlugen ebenfalls fehl.

Der einzige Hack, an den ich denken kann, ist, einige zu setzen servername, wie:

$ vim --servername VIM_LIGHTWEIGHT_MODE

Und dann checken Sie v:servernamein Vimscript ein, aber das ist ein totaler Hack: Dafür ist Servername überhaupt nicht gedacht .

Gibt es einen saubereren Weg, um das zu erreichen, was ich will?

Dmitry Frank
quelle
2
Sie können verwenden env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf
3
Sie können auch eine andere Initialisierungsdatei verwenden und vimals ausführen vim -u .vimrc-light.
gniourf_gniourf
1
Oh .. Ihre beiden Ideen sind cool, danke. Und ich war mir envüberhaupt nicht bewusst , mein Shell-Fu ist immer noch zu schwach. Erwägen Sie, es als Antwort zu schreiben, damit ich es akzeptieren kann.
Dmitry Frank

Antworten:

10

Es gibt (mindestens) zwei Möglichkeiten:

  1. Verwenden Sie env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. Verwendung vimmit einer anderen Initialisierungsdatei, z. B .vimrc-light.:

    EDITOR='/usr/bin/vim -u ~/.vimrc-light'
    
gniourf_gniourf
quelle
3

Während die akzeptierte Antwort sicherlich besser ist, möchte ich diskutieren EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". Das Problem hierbei ist, dass EDITORArgumente aufgerufen werden und die übergebenen Argumente bash -cnicht automatisch an weitergeleitet werden vim. Sie müssen verwenden "$@":

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\"'

Das erste Argument nach dem Befehl in bash -cist $0jedoch nicht Teil von $@. Daher müssen Sie ein Platzhalterargument verwenden:

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\" lightvim' 

Mit diesen Fallstricken ist es keine gute Option, aber dennoch praktikabel.

muru
quelle
0

Eigentlich ist Ihre erste Idee auch auf elegante Weise möglich. Sie können einen benutzerdefinierten Befehl erstellen und dann vim mit der +Syntax aufrufen .

Definieren Sie einfach einen benutzerdefinierten Benutzerbefehl in Ihrer .vimrcDatei wie folgt:

command! CustomUserCommandName AnyVimCommandToExecute

Dann können Sie über die Befehlszeile vim wie folgt starten:

$ vim +CustomUserCommandName

Ich habe dies in meinem verwendet, .vimrcum mir Notizen zu machen, wie folgt:

" Note Taking {{{
command! Note execute "normal \<Plug>VimwikiMakeDiaryNote"
command! Notes execute "normal \<Plug>VimwikiDiaryIndex" | execute "normal \<Plug>VimwikiDiaryGenerateLinks"
" }}}

Dies ermöglicht es, es damit aufzurufen vim +Note. Erstellen Sie dann einen Shell-Alias ​​in Ihrer Shells- rcDatei, um das Aufrufen noch einfacher zu machen. In meiner .bashrcDatei alias ich die obigen vim-Befehle wie folgt:

alias note="vim +Note"
alias notes="vim +Notes"

Probenlösung

In Ihrem Fall könnten Sie etwas in diese Richtung in Ihre .vimrcDatei schreiben :

command! LightMode let g:lightmode=1

Testen Sie dann den Lichtmodus, wie Sie möchten, auf Plugin-Basis oder in Gruppen von Plugins usw., indem Sie eine ifähnliche vim- Anweisung in Ihrer .vimrcDatei verwenden:

if exists("g:lightMode")
    " Do something cool with vim 
endif

Dinge zu beachten

  • Der !Befehl after the vim command!bedeutet, dass alle ähnlich definierten Befehle mit demselben Namen überschrieben werden. Dies ist vorzuziehen.
  • Das CustomUserCommandName MUSS den ersten Buchstaben groß geschrieben haben
  • Möglicherweise möchten Sie Ihren globalen Bereich, den g:Sie verwenden können, s:oder einen Bereich, der Ihren Anforderungen entspricht, nicht verschmutzen .
Erzengel33
quelle