Emacs tramp mode - автоматическое заполнение имени файла не работает

Я использую режим бродяги в Emacs для редактирования файлов через SSH. Но проблема в том, что в удаленной оболочке я назвал ls "ls --color". Tramp использует ls для автозавершения и не может проанализировать вывод ls с цветовой кодировкой.

Решение, упомянутое в https://www.gnu.org/software/tramp/, состоит в том, чтобы отключить окрашивание вывода из ls, удалив псевдоним. Я не хочу этого делать, потому что для меня это главная особенность.

Есть ли способ переопределить, как tramp выдает команду ls, чтобы я мог сохранить конфигурацию своей оболочки и все еще использовать завершение имени файла с tramp.

Редактировать 1: Кажется, что проблема в другом. Я попытался изменить псевдоним на "ls --color=auto", как предложено @chepner, а затем просто на "ls". Это все еще не работает. Как я могу дополнительно устранить проблему?

4 ответа

Решение

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. Все это благодаря Майклу Альбинусу.

Переопределите свой псевдоним, чтобы читать

alias ls="ls --color=auto"

Сюда, ls только окрашивает свой вывод, когда он чувствует, что пишет в терминал. Я не знаком с tramp, но этого должно быть достаточно.

Tramp использует сложные методы для переносимости в различные системы, но он не является надежным. Часто для предоставления таких вещей, как удаленное завершение имени файла, на удаленном хосте фактически запускаются скромные сценарии Perl. Поэтому убедитесь, что Perl 5 установлен, настроен и доступен на удаленном хосте.

Другая вещь, которую я хотел бы сделать, это посмотреть в моем окружении, если есть что-то, что указывает на то, что вы находитесь в "режиме бродяги"

Скажи, сделай:

printenv | sort > ~/notramp.txt

тогда в emacs/tramp-mode:

printenv | sort > ~/withtramp.txt

Разместите два env-файла и посмотрите, что отличается.

Затем в вашем ~/.bashrc вы можете поместить

if [ -z "$TRAMPFLAG" ]
then
    alias ls='ls --color=auto'
fi
Другие вопросы по тегам