Kann ich die automatische Vervollständigung von Tab in Bash auf Groß- und Kleinschreibung beschränken?

144

Ubuntus Terminal verwendet die automatische Vervollständigung von Groß- und Kleinschreibung, wie ich es für Linux erwartet hätte.

Aber ich denke, es wäre oft bequemer, stattdessen die Groß- und Kleinschreibung zu ignorieren, um zu vermeiden, dass Sie beim Beginnen eines Namens genau sein müssen, und wäre wahrscheinlich die zusätzlichen Fehlalarme wert. Ist es möglich, dieses Verhalten zu ändern?

mwfearnley
quelle
Sehr gute frage Als Usability-Tool sollte die Tab-Vervollständigung bei der Benennung nicht so streng sein wie das Computersystem im Allgemeinen.
Masterxilo

Antworten:

170

Um bashGroß- und Kleinschreibung für den aktuellen Benutzer nicht zu berücksichtigen:

Führen Sie das folgende Shell-Skript in einem Terminal aus:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Starten Sie eine neue Shell (öffnen Sie das Terminal erneut).

So nehmen Sie die Änderungen systemweit vor:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Einzelheiten finden Sie unter man bash. Ja, es ist eine lange Seite, aber bash ist ein etwas komplexes Programm, und wenn Sie diese Seite nur nach Groß- und Kleinschreibung durchsuchen möchten, gehen Sie zum entsprechenden Abschnitt. In der Regel lernen die Teilnehmer, jeweils eine Option oder ein Bash-Skript zu verwenden, und es dauert lange, bis sie alle Nuancen beherrschen. Ihr Interesse kann variieren.

Panther
quelle
Vielen Dank. Ich schätze die benutzerspezifische / nicht-admin-freundliche Lösung. Die Echolinie scheint funktioniert zu haben, aber jetzt habe ich anscheinend die Möglichkeit verloren, den Cursor mit Strg-Links / Rechts zu bewegen. Wäre >>auch sicherer als >?
Mwfearnley
Im Allgemeinen >> wird sicherer sein, mein Fehler, ich nahm an, Sie hatten keine ~ / .inputrc. Ich setze auch noclobber =) Bit sicher, warum deine Pfeiltasten nicht funktionieren, ich kann das nicht replizieren. Sie können ~ / .inputrc entfernen und eine neue Shell starten.
Panther
Ja, es funktioniert wieder , wenn ich es entfernen .. Nach linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html die neue inputrc könnte die globale einen zwingenden werden?
Mwfearnley
2
Heilige Scheiße, ich habe dies in / etc / inputrc kopiert und kann nicht mehr "i" eingeben und wenn ich "e" eingebe, spammt es einfach "ssssssssss [..]" in die Konsole. Verwenden Sie besser die Lösung von @ emtin4
Luca Steeb
2
@LucaSteeb Das habe ich auch getroffen, aber dann wurde mir klar, dass dieser ganze Block nicht in deine .inputrc geschrieben werden soll, sondern nur einmal. Nur $include /etc/inputrcund set completion-ignore-case onsollte in Ihrer ~ ..inputrc-Datei sein.
Chris
49

Öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Passwort eingeben. Terminal neu starten.

Wenn Sie in einigen Fällen die Groß- / Kleinschreibung nicht berücksichtigen möchten, bearbeiten Sie einfach die Datei / etc / inputrc, indem Sie die set completion-ignore-caseZeile entfernen .

Das ist alles.

emtin4
quelle
OK, das habe ich für dich geklärt. Es dauert eine Weile, um etwas über Bash zu lernen, aber erforschen, lesen und fragen Sie weiter. linuxcommand.org ist ein beliebter Start;)
Panther
3
Falls es mehr als einen Benutzer gibt, ändert sich dies für alle, was möglicherweise das gewünschte Verhalten ist
Walter Tross
2
bei weitem die einfachste und
einfachste
einfache und klare Antwort
Developerium
12

Ich weiß, dass diese Frage sehr alt ist, aber es sei denn, ich vermisse etwas, ich glaube, ich habe eine super einfache Lösung, wenn Sie Bash verwenden.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Oder fügen Sie die Zeile einfach mit Ihrem bevorzugten Texteditor hinzu. Starten Sie Ihre Bash-Sitzung neu und genießen Sie.

init3
quelle
2
Nun, Ihnen fehlt etwas: ~/.inputrcwird von readline gelesen, was bash verwendet, um diese Vervollständigung bereitzustellen. Readline- wird auch von anderen Programmen verwendet, so, denn dies ist im Allgemeinen Einstellung, ~/.inputrcwie vorgeschlagen die akzeptierte Antwort wäre besser.
Muru
Vielen Dank für Ihren Vorschlag, der mir ein wenig mehr beibringt, aber ich muss sagen, dass er nicht einfacher zu sein scheint als der, den ich akzeptiert habe. Dabei wird lediglich eine zusätzliche Zeile verwendet, um sicherzustellen, dass die neue Datei die alte nicht ungültig macht.
Mwfearnley
perfekt. bind 'set completion-ignore-case on'.bashrc
Nun,
3

Sie können dies tun, indem Sie eine Konfigurationsvariable für GNU readline festlegen, die die Eingabe in einer interaktiven Shell verarbeitet.

Die benötigte Variable ist completion-ignore-caseund kann direkt in Ihrer Bash-Sitzung festgelegt werden mit:

bind "set completion-ignore-case on"

Es kann für alle zukünftigen Bash-Sitzungen aktiviert werden, indem es in die Benutzerdatei ~/.inputrcoder in das System gestellt /etc/inputrcwird, um es für alle Benutzer zu aktivieren. Dies ist die Initialisierungsdatei für readline.

Aber beachten Sie, dass , wenn Sie erstellen ~/.inputrc, wird dies die Systemkopie außer Kraft setzen . (Für mich führte dies dazu, dass ich einige Tastenzuordnungen verlor, wie z. B. Ctrl-Left/ Right. Sie können sehen, welche durch Durchsuchen der /etc/inputrcDatei.) Um
dieses Problem zu beheben, müssen Sie die Zeile $include /etc/inputrcoben einfügen ~/.inputrc, z.

$include /etc/inputrc

set completion-ignore-case on

Um die Änderungen zu übernehmen, starten Sie bash oder nachladen inputrc , zB mit Ctrl+x, Ctrl+r.

Weitere Informationen zu readline und inputrc finden Sie in man bashund man 3 readline.

mwfearnley
quelle