Redefine your alias to read
alias ls="ls --color=auto"
This way, ls
only colorizes its output when it senses it is writing to the terminal. I'm not familiar with tramp
, but this should be sufficient.
Я использую режим бродяги в Emacs для редактирования файлов через SSH. Но проблема в том, что в удаленной оболочке я назвал ls "ls --color". Tramp использует ls для автоматического завершения и не может проанализировать вывод ls с цветовой кодировкой.
Решение, упомянутое в https://www.gnu.org/software/tramp/#Frequently-Asked-Questions, состоит в том, чтобы отключить окрашивание вывода из ls, удалив псевдоним. Я не хочу делать это, потому что это главная особенность для меня.
Есть ли способ переопределить, как tramp выдает команду ls, чтобы я мог сохранить конфигурацию своей оболочки и все еще использовать завершение имени файла с tramp.
Редактировать 1 : Кажется, что проблема в другом. Я попытался изменить псевдоним на «ls --color = auto», как предложено @chepner, а затем просто на «ls». Это все еще не работает. Как я могу дополнительно устранить проблему?
Redefine your alias to read
alias ls="ls --color=auto"
This way, ls
only colorizes its output when it senses it is writing to the terminal. I'm not familiar with tramp
, but this should be sufficient.
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
Tramp отправляет следующий фрагмент Perl, чтобы получить завершение файла
\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 был сломан на удаленном хосте из-за отсутствия библиотеки. Решение было вручную починить сломанный perl5. Все это благодаря Майклу Альбинусу .
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.