
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.le
vimが期待する形式に変換します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()
使い始めました。