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