1

Я использую режим бродяги в 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». Это все еще не работает. Как я могу дополнительно устранить проблему?

4 ответа4

2

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

alias ls="ls --color=auto"

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

0

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

0

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

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

printenv | sort > ~/notramp.txt

затем в emacs/tramp-mode:

printenv | sort > ~/withtramp.txt

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

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

if [ -z "$TRAMPFLAG" ]
then
    alias ls='ls --color=auto'
fi
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .