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

866
Xolve

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

1
«Переименование» стандартной команды с помощью псевдонима или функции - всегда плохая идея. Почему бы тебе просто не назвать вместо этого свой цветной ls "lc"? tink 11 лет назад 0
Вы пробовали `(setq tramp-debug-buffer t) (setq tramp-verbose 10)`? Old Pro 11 лет назад 0
@OldPro Вот отладочный вывод: http://pastebin.com/PZuxs1St Xolve 11 лет назад 0
Трудно понять это. Вам нужно поместить операторы отладки в ваш файл .emacs, чтобы вы могли видеть, как tramp настраивается при загрузке. Вероятно, Бродяга делает неправильное предположение. Он может подумать, что / home / username является именем хоста и пытается подключиться к этому хосту? Или, может быть, он не может запустить сценарии perl на цели? Просто угадай. Проверьте, не звонит ли какой-либо из параметров конфигурации: https://www.gnu.org/software/tramp/#Customizing-Completion Old Pro 11 лет назад 1

4 ответа на вопрос

2
chepner

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.

Ваш псевдоним не имеет значения. Хорошо написанные сценарии (например, tramp) обходят псевдонимы, используя полные пути, например `/ bin / ls`. Old Pro 11 лет назад 0
BSD `ls` имеет переменные окружения` CLICOLOR` и `CLICOLOR_FORCE`, которые также могут влиять на то, как` ls` производит цветной вывод. Я не уверен, что GNU `ls` имеет что-то подобное (ничего на странице руководства, и, похоже, ничего в руководстве Texinfo). chepner 11 лет назад 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 
Я попробовал ваш метод, и он не работает. Похоже, это какой-то другой вопрос. Xolve 11 лет назад 0
0
Xolve

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

Эй, я сказал, что, возможно, он не смог запустить Perl на цель тоже. :-) Old Pro 11 лет назад 1
Да правильно! Я мог бы дать вам награду, если бы вы предоставили ее в качестве ответа. Xolve 11 лет назад 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.

Похожие вопросы