Emacs-Tramp-Modus - Automatische Vervollständigung von Dateinamen funktioniert nicht

936
Xolve

Ich verwende den Tramp-Modus in Emacs, um Dateien über SSH zu bearbeiten. Aber das Problem ist, dass ich auf Remote Shell ls als "ls --color" eingegeben habe. Tramp verwendet ls für die automatische Vervollständigung und kann die farbkodierte Ausgabe von ls nicht analysieren.

Die in https://www.gnu.org/software/tramp/#Frequently-Asked-Questions erwähnte Lösung besteht darin, die Farbgebung der Ausgabe von ls zu deaktivieren, indem der Alias ​​entfernt wird. Ich möchte es nicht tun, da es für mich ein Hauptmerkmal ist.

Gibt es eine Möglichkeit, den Befehl tramp per ls neu zu definieren, so dass ich meine Shell-Konfiguration beibehalten und die Dateinamenvervollständigung weiterhin mit tramp verwenden kann.

Edit 1 : Das Problem scheint etwas anderes zu sein. Ich habe versucht, den Alias ​​in 'ls --color = auto' zu ändern, wie von @chepner vorgeschlagen, und dann einfach 'ls'. Es funktioniert immer noch nicht. Wie kann ich das Problem weiter beheben?

1
Das Umbenennen eines Standardbefehls über Alias ​​oder Funktion ist eigentlich immer eine schlechte Idee. Warum nennst du nicht einfach dein farbenfrohes ls "lc"? tink vor 11 Jahren 0
Haben Sie versucht `(setq tramp-debug-buffer t) (setq tramp-verbose 10)`? Old Pro vor 10 Jahren 0
@OldPro Hier ist die Debug-Ausgabe: http://pastebin.com/PZuxs1St Xolve vor 10 Jahren 0
Schwer zu verstehen. Sie müssen die Debug-Anweisungen in Ihre .emacs-Datei einfügen, damit Sie sehen können, wie sich Tramp beim Laden selbst konfiguriert. Wahrscheinlich macht Tramp eine schlechte Vermutung. Es könnte sein, dass / home / username ein Hostname ist und versucht, eine Verbindung zu diesem Host herzustellen, oder es ist möglicherweise nicht möglich, Perl-Skripts auf dem Ziel auszuführen. Einfach raten. Prüfen Sie, ob eine der Konfigurationsoptionen ein Problem darstellt: https://www.gnu.org/software/tramp/#Customizing-Completion Old Pro vor 10 Jahren 1

4 Antworten auf die Frage

2
chepner

Definieren Sie Ihren Alias ​​neu, um ihn zu lesen

alias ls="ls --color=auto" 

Auf diese Weise lsfärbt sich die Ausgabe nur ein, wenn sie feststellt, dass sie auf das Terminal schreibt. Ich kenne mich nicht aus tramp, aber das sollte ausreichen.

Dein Alias ​​spielt keine Rolle. Gut geschriebene Skripte (wie tramp) umgehen Aliasnamen, indem sie vollständige Pfadnamen verwenden, z. B. `/ bin / ls`. Old Pro vor 10 Jahren 0
BSD `ls` hat die Umgebungsvariablen` CLICOLOR` und `CLICOLOR_FORCE`, die auch beeinflussen können, wie` ls` eine farbige Ausgabe erzeugt. Ich bin nicht sicher, ob GNU `ls` etwas Ähnliches hat (nichts in der Manpage und anscheinend nichts im Texinfo-Handbuch). chepner vor 10 Jahren 0
0
Rich Homolka

The other thing I would do, is look in my environment if there is anything that indicates you're in "tramp mode"

Say, do:

printenv | sort > ~/notramp.txt 

then in emacs/tramp-mode:

printenv | sort > ~/withtramp.txt 

Diff the two env files, and see what's different.

Then, in your ~/.bashrc, you can put

if [ -z "$TRAMPFLAG" ] then alias ls='ls --color=auto' fi 
Ich habe Ihre Methode ausprobiert und funktioniert nicht gleich. Sieht aus wie ein anderes Problem. Xolve vor 11 Jahren 0
0
Xolve

Tramp senden Sie das folgende Perl-Snippet, um Dateivervollständigungen abzurufen

\perl5 -e 'sub case { my $str = shift; if ($ARGV[2]) { return lc($str); } else { return $str; } } opendir(d, $ARGV[0]) || die("$ARGV[0]: $!\nfail\n"); @files = readdir(d); closedir(d); foreach $f (@files) { if (case(substr($f, 0, length($ARGV[1]))) eq case($ARGV[1])) { if (-d "$ARGV[0]/$f") { print "$f/\n"; } else { print "$f\n"; } } } print "ok\n" ' /home/ '' 0 

Perl5 wurde auf dem Remote-Host aufgrund einer fehlenden Bibliothek beschädigt. Die Lösung bestand darin, die kaputte Perl5 manuell zu reparieren. All dies danke Michael Albinus .

Hey, ich sagte, vielleicht konnte es auch nicht perl auf dem Ziel laufen. :-) Old Pro vor 10 Jahren 1
Ja, genau! Ich hätte dir Kopfgeld geben können, wenn du es als Antwort gibst. Xolve vor 10 Jahren 0
0
Old Pro

Tramp uses sophisticated techniques to be portable across a variety of systems, but it is not foolproof. Often to provide things like remote filename completion tramp will actually run modest perl scripts on the remote host. So check to make sure you have perl 5 installed, configured, and available on the remote host.