Ich verwende bash und ich frage mich , ob es eine Plugin in bash oder andere Schale ist , die mich , dies zu tun erlaubt
cat tfnislong.txt
+ [tab]
abgeschlossen ist, um cat ThisFileNameIsSoLong.txt
wie Tabulatorvervollständigung in Sublime Text.
Ich verwende bash und ich frage mich , ob es eine Plugin in bash oder andere Schale ist , die mich , dies zu tun erlaubt
cat tfnislong.txt
+ [tab]
abgeschlossen ist, um cat ThisFileNameIsSoLong.txt
wie Tabulatorvervollständigung in Sublime Text.
Antworten:
Ich kenne https://github.com/mgalgs/fuzzy_bash_completion , eine Reihe von Shell-Funktionen, die mit verwendet werden complete
.
Ich denke, wir könnten es wahrscheinlich etwas besser machen, prägnanter sein. Zeit, dein .bashrc oder .profile aufzubrechen ...
Der grundlegende Haken, den wir verwenden, ist folgender:
complete -o nospace -o filenames -F fuzzypath cd ls cat
-F Option bedeutet, dass eine Shell-Funktion für die Tab-Vervollständigung verwendet wird, wobei die Optionen in der COMPREPLY
Variablen festgelegt werden. Also zum Beispiel:
Funktion fuzzypath () { wenn [-z $ 2] dann COMPREPLY = (`ls`) sonst DIRPATH = `echo" $ 2 "| gsed 's | [^ /] * $ ||' ` BASENAME = `echo" $ 2 "| gsed 's |. * / ||' ` FILTER = `echo" $ BASENAME "| gsed 's |. | \ 0. * | g'` COMPREPLY = (`ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "`) fi }}
Wo DIRPATH
ist alles vor dem letzten / auf Ihrem Pfad, den Sie eingeben, und BASENAME
wo befindet sich derzeit Ihr Cursor?
FILTER
Hier kommt die Unschärfe ins Spiel. Nehmen Sie im Grunde genommen ein BASENAME
Zeichen .*
zwischen jedes Zeichen und fügen Sie es ein , um unseren Fuzz-Regex zu erzeugen.
Der Rest kombiniert nur den regulären Ausdruck mit ls, um zu produzieren COMPREPLY
. Vielleicht finden Sie hier klügere Dinge, vielleicht mit find
.
Ich fand auch http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html nützlich.
Sie können fzf nützlich finden. Es ist ein in Ruby geschriebener Allzweck-Fuzzy-Finder, der mit jeder Liste von Dingen verwendet werden kann: Dateien, Prozesse, Befehlsverlauf, Git-Zweige usw.
Das Installationsskript richtet die CTRL-T
Tastenkombination für Ihre Shell ein. Das folgende GIF zeigt, wie es funktioniert.
fzf
.. (tput sc) aufrief und später mit tput rc
..
Um Ihrer anderen Antwort zu folgen, sollten Sie sich zsh ansehen. Es ist abwärtskompatibel mit Bash, sodass Sie es als Ersatz verwenden können. Es unterstützt jedoch erheblich erweiterte Funktionen und eine davon ist die stark kontextbezogene Vervollständigung von Registerkarten.
Die häufig gestellten Fragen zu zsh Completion erweitern die Anwendungsfälle, aber ich glaube, dass Sie gemäß Ihrem Beispiel am meisten an der COMPLETE_IN_WORD
Funktion interessiert wären . Es ist nicht ganz das gewünschte Verhalten, aber es ist nah. Der Hauptpunkt ist, dass es viele Möglichkeiten gibt, die Basisfunktionalität auf eine möglicherweise zugänglichere Weise zu erweitern als die Verwendung von Bash.
Hier ist eine Fuzzy-Match-Erweiterung, die sich Ihren Wünschen nähert. zsh-fuzzy match
Für einige Ideen können Sie sich das beliebte oh-my-zsh- Framework ansehen , das eine Reihe von Funktionen zum Verwalten und Erweitern von zsh bietet. Es ist höchstwahrscheinlich mehr als Sie möchten, aber unter den Plugins finden Sie Skripte zur automatischen Vervollständigung für eine Vielzahl von Rollen. Um sich ein Bild von den Funktionen zu machen.
cat Th
+ machentab
?