Was ist Befehl! -bang -nargs = * in einer vimrc-Datei?


9

Ich habe ein Dokument über vim gelesen und der Autor schlägt eine Codezeile vor, die in .vimrc eingefügt werden soll, aber ich habe überhaupt keine Ahnung, was es ist.

command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>), 1, <bang>0)

Also , was ist command!, -bang, -nargs, etc?

Antworten:


15

Wie immer ist die Hilfe dein bester Freund:

:h :command::

:com[mand][!] [{attr}...] {cmd} {rep}

Definieren Sie einen Benutzerbefehl. Der Name des Befehls lautet {cmd} und sein Ersatztext lautet {rep}. Die Attribute des Befehls (siehe unten) sind {attr}. Wenn der Befehl bereits vorhanden ist, wird ein Fehler gemeldet, es sei denn, a! wird angegeben. In diesem Fall wird der Befehl neu definiert.

Auf diese Weise :command!wird ein neuer Befehl erstellt, den Sie über die Befehlszeile verwenden können. Hier ist der neue Befehl :Findund wird verwendet, um auszuführen, fzf#vim#grep()was ein Aufruf des Plugins ist, fzfder es ermöglicht, einige Dateien unscharf zu finden.

Die anderen Argumente sind in der Dokumentation beschrieben:

  • :h :command-nargs -nargs wird verwendet, um den neuen Befehl in die Lage zu versetzen, ein Argument aufzunehmen :Find arg1
  • :h :command-bang -bangwird verwendet, um den neuen Befehl in die Lage zu versetzen, ein !Like in zu interpretieren:Find!

Das !Recht danach commandwird verwendet, um vim anzuweisen, den Befehl neu zu definieren, falls er bereits vorhanden ist. Auf diese Weise erhalten .vimrcSie keine Fehlermeldung , wenn Sie Ihren Befehl eingeben.

Was die an die fzfFunktion übergebenen Argumente betrifft, lasse ich Sie das Dokument des Plugins lesen, um zu sehen, was sie tun :)


Sie antworten präziser als doc. Wenn ich also kein fzf installiert habe, das heißt, ich möchte einen einfacheren Befehl definieren, command! -bang -nargs=* Find 'rg --column --line-number --no-heading --fixed-strings --ignore-case --no-ignore --hidden --follow --glob "!.git/*" --color "always"'funktioniert dieser Befehl ?
Tuyen Pham

1
@TuyenPham wahrscheinlich nicht: Der Code in Ihrem Kommentar erstellt einen Befehl, Findder ersetzt wird, rg --column etc...aber rgkein vim-Befehl ist. Er ist ein Argument für die fzfFunktion, sodass Vim einen Fehler ausgibt. Wenn Sie ein Beispiel für einen einfachen Befehl wünschen, sehen Sie sich diesen an : command! DT windo diffthis. Es wird der Befehl erstellt, der :DTkein Argument oder irgendetwas akzeptiert und den Diffmode in vim startet. Der {rep}Teil des Befehls muss ein Ausdruck sein, den vim versteht.
Statox

Ich glaube, was Tuyen in rg meinte, ist ripgrep, ein anderes Werkzeug im Gegensatz zu FZF.
Jimmy MG Lim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.