vim을 사용하여 파일을 열 때 vim은 파일이 존재하지 않는 경우에도 매개 변수로 전달한 이름으로 빈 파일을 엽니다. 파일이 존재하는 파일만 열도록 vim에게 어떻게 지시할 수 있나요?
답변1
[ -e $1 ] && vim $1
간단한 솔루션의 핵심입니다. "pv.cmd" 파일(p는 보호됨...)에 이 줄을 쓰고 "새 명령"을 정의하여 테스트했습니다.
alias pv='source pv.cmd'
나는 이 모든 것이 (나는 단지...) 인수를 통해 작동하기를 원하기 때문에 필요하다고 생각합니다.
이제 갈 수 있어요
pv filename<enter>
그리고 파일 이름이 존재하지 않으면("-e" 테스트) 0.000초 내에 새로운 프롬프트 줄이 표시됩니다(저는 그랬습니다 time pv jjjjjj
).
그렇지 않으면 파일은 vim에서만 열립니다.
인수 없이 pv만 실행해도 vim(환영 화면)이 실행됩니다.
여기에는 다양한 옵션이 있습니다. "pv" 별칭의 이름을 지정하는 방법은 무엇입니까? 빠르지만 위험한 "v"? 이 별칭을 가장 잘 정의하는 곳은 어디입니까? vim이나 vi에 별칭을 사용합니까? 이 라이너를 bash 실행 파일로 만드시겠습니까? 쉘 기능?
이전에 이런 일이 발생하면(원치 않는 빈 파일 편집) 나인지 vim인지 궁금했습니다. 하지만 이제는 :q
파일을 생성하지 않고 즉시 진행됩니다.
이 줄에는 첫 번째 인수(bash에서는 "$1"이라고 함)가 필요하므로 pv.cmd에서 직접 테스트할 수 없습니다. 매개변수를 확인하기 위한 oneliner의 별칭이 $1
최소 요구 사항이라고 생각합니다.
...또는 VIM에 옵션이 있나요?
함수를 사용하는 것은 거의 똑같다고 말하고 싶습니다. 취향과 그것을 구성하는 방법(또는 시스템이 구성하는 방법 :-)
답변2
다양한 Vim 도움말 파일을 대충 살펴보면 Vim 스크립트를 사용하지 않고 이것이 가능한지 알 수 없습니다. :e filename
Vim에서 을 사용하고 있는데 버퍼 가 filename
존재하지 않는다면, 편집기는 해당 이름으로 새 버퍼를 열고 사용할 때 해당 이름으로 버퍼를 저장합니다 :w
. 이것은 일반적으로 당신이 할 일입니다생각하다해.
파일 이름이 있어야 하는 경우시작Vim, vim
쉘 함수를 사용하여 이 명령을 오버로드할 수 있습니다:
vim () {
if [ -e "$1" ] || [ -z "$1" ]; then
command vim ${1:+"$1"}
else
printf 'No such file or directory: %s\n' "$1" >&2
return 1
fi
}
이를 통해 다음을 수행할 수 있습니다.
- 기존 파일만 편집하고
- Vim 시작아니요명령줄에서 파일을 생성하세요(이렇게 하면
:e filename
Vim에서 새 파일을 생성할 수 있습니다).
[ -e "$1" ]
두 개의 테스트는 [ -z "$1" ]
함수에 대한 첫 번째 인수가 파일 이름으로 존재하는지 아니면 비어 있는지를 감지합니다.
인수 확장은 ${1:+"$1"}
주어진 인용 파일 이름으로 확장되거나 파일 이름이 제공되지 않으면 아무것도 확장되지 않습니다.
command vim
함수를 재귀적으로 호출하지 않도록 하세요.
사용자가 Vim에 전달할 수 있는 가능한 옵션도 처리하려면 명령줄 인수를 구문 분석하고 존재하지 않는 이름에 해당하는 파일 이름 피연산자에 대한 인수를 제거해야 합니다.
vim () {
dashdash=false
for arg do
use_arg=false
case $arg in
--)
dashdash=true
use_arg=true
;;
-*)
if "$dashdash"; then
[ -e "$arg" ] && use_arg=true
else
use_arg=true
fi
;;
*)
[ -e "$arg" ] && use_arg=true
esac
if "$use_arg"; then
set -- "$@" "$arg"
else
printf 'No such file or directory (skipping): %s\n' "$arg" >&2
fi
shift
done
unset arg dashdash use_arg
command vim "$@"
}
여기서 유일하게 까다로운 점은 --
명령줄의 인수가 옵션의 끝을 나타낸다는 것입니다. 즉, 뒤에 오는 모든 매개변수는 --
파일 이름으로 테스트되어야 하며, 아직 본 적이 없지만 대시로 시작하는 모든 매개변수에 대한 테스트를 --
건너뛸 수 있습니다 .-e
기존 파일 이름이 지정되지 않은 경우 이 함수는 빈 버퍼로 편집기를 엽니다.