Emacsのトランプモード - ファイル名の自動補完が機能しない


1

私はEmacsでトランプモードを使ってsshでファイルを編集しています。しかし問題は、リモートシェルではlsに "ls --color"というエイリアスを付けたことです。 Trampは自動補完のためにlsを使います、そしてそれは色分けされたls出力を解析することができません。

に記載されている解決策 https://www.gnu.org/software/tramp/#Frequently-Asked-Questions 別名を削除して、lsからの出力の色付けを無効にします。それが私にとって大きな特徴であるので、私はそれをしたくありません。

trampがlsコマンドを発行する方法を再定義して、シェル構成を保持したままtrampでファイル名補完を使用できるようにする方法はありますか。

編集1 :問題は他の何かであるようです。 @chepnerで示唆されているようにエイリアスを 'ls --color = auto'に変更してから、単に 'ls'に変更してみました。まだうまくいきません。さらに問題を解決するにはどうすればよいですか。


エイリアスまたは関数を介して標準コマンドの名前を変更することは、ほとんど常に悪い考えです。代わりにあなたの色のついたlsを代わりに "lc"と呼んでみませんか?
tink

試しましたか (setq tramp-debug-buffer t) (setq tramp-verbose 10)
Old Pro

@OldProこれがデバッグ出力です。 pastebin.com/PZuxs1St
Xolve

1
それを理解するのは難しいです。あなたはそれがロードされたときtrampがそれ自身をどのように設定するかを見ることができるようにあなたの.emacsファイルにデバッグステートメントを入れる必要があります。おそらくtrampは悪い推測をしています。 / home / usernameはホスト名でそのホストに接続しようとしているのでしょうか?それともターゲット上でperlスクリプトを実行できないのでしょうか?ただ推測しています。設定オプションのどれかがベルを鳴らすかどうかを確認してください。 gnu.org/software/tramp/#Customizing-Completion
Old Pro

回答:


2

別名を再定義して読む

alias ls="ls --color=auto"

こちらです、 ls 端末への書き込みを感知したときにのみ、その出力を色付けします。なじみがない trampしかし、これで十分なはずです。


あなたの別名は関係ありません。よく書かれたスクリプト(trampのような)は、フルパス名を使ってエイリアスを迂回します。 /bin/ls
Old Pro

BSD ls 環境変数があります CLICOLOR そして CLICOLOR_FORCE それはまた方法に影響を与えることができます ls カラー出力を生成します。 GNUかどうかわかりません ls 似たようなものがあります(manページには何もなく、Texinfoマニュアルにも一見何もありません)。
chepner

0

もう1つは、あなたが「トランプモード」にいることを示す何かがあるかどうか私の環境を見てみることです。

言ってやる:

printenv | sort > ~/notramp.txt

emacs / tramp-modeでは:

printenv | sort > ~/withtramp.txt

2つのenvファイルを比較して、違いを確認してください。

それから、〜/ .bashrcの中に、

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

私はあなたの方法を試してみました、そしてそれは機能するのと同じではありません。他の問題のように見えます。
Xolve

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を手動で修正することでした。このおかげで マイケルアルビナス


1
こんにちは、私はそれもターゲット上でperlを実行することができなかったかもしれないと言いました。 :-)
Old Pro

ええ、その通り!あなたが答えとしてそれを提供すれば私はあなたに恩恵を与えたかもしれません。
Xolve

0

Trampは洗練された技術を使ってさまざまなシステムにまたがって移植できるようになっていますが、それは絶対確実というわけではありません。多くの場合、リモートのファイル名補完のようなものを提供するためにtrampはリモートホスト上でささやかなperlスクリプトを実行します。それで、あなたがperl 5がインストールされ、設定され、そしてリモートホスト上で利用可能であることを確かめるためにチェックしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.