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줄 느낌최적이 아닌, 그리고 많은 도우미 기능으로 내 환경을 채우세요.
나는 이것을 두 번째 줄로 사용해 보았지만 신뢰할 수 없는 것 같습니다.
_completion_loader scp
때로는 tmux가 아닌 경우 새 쉘을 생성하면 "_completion_loader not find" 오류가 발생합니다. 그러나
_completion_loader _scp
이 셸을 실행하면 함수가 오류 없이 완료됩니다.
-o ption
그냥 희귀성 이나 경로 에 들어갈 수 있기 때문에 이것은 나에게 충분히 잘 작동합니다 http://
.
하지만 내 생각엔 이건 아닌 것 같아좋아요더 나은 솔루션/답변이 나오길 바라기 때문에 이를 받아들이지 않을 것입니다.
참고: 방금 사용하기 전에 시도해 보았습니다.표준에서 제공하는 _known_hosts_real() 함수를 수정했습니다., 방법을 찾았습니다더 많은 옵션을 지원하려면 런타임에 패치하세요., 하지만 빨리 포장할 수 없어서 _vim()
사용에 대한 약간의 불편함은 무시 _scp()
하고 사용하기 시작했습니다.