vimおよびemacs 'scp://'リモートファイルパスのBashコマンドライン補完機能

vimおよびemacs 'scp://'リモートファイルパスのBashコマンドライン補完機能

vimシェルを使用するか、emacsシェルで編集するリモートファイルを簡単に指定しますscp

scpスムーズかつ迅速に作業を完了できる場合.ssh/configはい 正しく 設定

vimそれでは、および他のssh有能な編集者に適していないのはなぜですか?私は、標準bash-completionパッケージが私が知っている限り、まだ公開されていないssh認識エディタのための完成機能の利点を享受できると思います。

afuse(使用でき、sshfs「解決方法」として使用する環境では、Shell initで作成されたユーザーレベルのafuse sshfs自動インストーラデーモンオンデマンドバックグラウンドは、リモートファイルシステムをサブツリーにマウントします~/scp/。 )

答え1

私はあなたの解決策を試しました。これは、ホームブレークを使用するMac OSX 10.11システムでよりうまく機能するように少し変更されたバージョンです。

まず、rvim_fun.shファイルで以下を定義します。

vi () {
  local params=();
  while [[ ! -z $1 ]]; do
    # test if arg begins a sequence S of characters
    #    - . A-Z a-z 0-9 @ _
    # followed by a colon,
    # if so, we replace S: by scp://S/ to match vim syntax

    if [[ "$1" =~ ^[-.A-Za-z0-9@_]*:.*$ ]]; then
      params=("scp://${1/://}" "${params[@]}");
    else
      params+=("$1");
    fi;
    shift;
  done;
  echo vi ${params[@]};
  $HOME/bin/vi ${params[@]};
}

私はこれが私にとってうまくいくと思います(また、MaxVimを呼び出す〜/ binにviプログラムがインストールされています)。

これで、Macでhomebrewを介してbashコンプリート機能をインストールしました。私がしなければならなかったのは、次のものを.bashrcファイルに入れることだけでした。

case "$-" in
*i*)    source rvim_func.sh 
        complete -F _scp -o nospace vi
        ;;
*)  ;;
esac

したがって、私はホームブレークに関連するもの以外は直接何も得ません。

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

これはホームブルームディスカッション掲示板からのものです…

とにかく、これは今私にとってとてもうまくいっています...ありがとう!

答え2

_scp私はリモートホスト/パス/ファイルを完成させるために使用できる標準のbashコンプリート機能を「乱用」する方法をハックしました。

その後、vimラッパー関数は、形式で返されたパスをho.st:/fol/der/fi.levimが期待する形式に変換しますscp://ho.st///fol/der/fi.le

vim () {
  local params=();
  while [[ ! -z $1 ]]; do
    if [[ "$1" =~ ^[a-z0-9-]*:/.*$ ]]; then
      params=("scp://${1/:\//\/\//}" "${params[@]}");
    else
      params+=("$1");
    fi;
    shift;
  done;
  echo vim ${params[@]};
  /usr/bin/vim ${params[@]};
}
. /usr/share/bash-completion/completions/scp
complete -F _scp -o nospace vim

Emacsの場合は、以下を使用してください。params=("/scp:$1" "${params[@]}");

ただし、この設定はよりうまく機能する可能性があります。現在、このアプローチにはいくつかのマイナーな欠点があります。

  • vim全体をタップできません-o ptions。しかし、とにかく私はほとんど使用しません。
  • オプションはscpまだ存在します(しかし私は決してバラよりそれらを)
  • scp://パスにのみ適用されます。しかし、私はrsyncやhttpなどの他のものをほとんど使用しません。
  • 最後の2行の感じ最適ではない、そして多くのヘルパー機能で私の環境を満たしてください。

    私はこれを2行目にしてみましたが、信頼できないようです。

    _completion_loader scp

    場合によっては、tmuxではない場合、新しいシェルを作成すると "_completion_loader not find"エラーが発生します。ただし_completion_loader _scp、このシェルを実行すると、関数はエラーなしで完了します。

-o ptionただ希少性やパスに入ることができるので、これは私にとって十分にうまくいきますhttp://

しかし、私の考えではこれではないようです。いいねより良い解決策/答えが出てほしいので、それを受け入れません。

注:ちょうど使用する前に試してみました。標準で提供される_known_hosts_real()関数を修正しました。、方法を見つけましたより多くのオプションをサポートするには、実行時にパッチを適用してください。しかし、すぐに包装することができなかったので、_vim()使用の少し不快感は無視して_scp()使い始めました。

関連情報