"vi"를 입력했지만 "cd"를 의미 할 때 자동 감지?


21

하루에 약 5 번, "cd"를 의미 할 때 "vi"를 입력하고 vi에서 디렉토리를 엽니 다. 그것은 나를 너트로 만들고 있습니다. "vi + directory"를 입력하고 자동으로 "cd + directory"로 변경하면 감지하는 방법이 있어야합니다. 생각?


1
(회피하는 것은 ^^ 그때까지 자극 가져 오는 동안, 당신은 문제의 원인을 해결하자 일) 나는 당신이뿐만 아니라 인터 휴식 찾을 수 있다는 대안을 ^^ 준
올리비에 Dulac을


1
Enter와 화살표를 사용하여 폴더 내부의 파일을 탐색 할 수 있다는 것을 알기 전까지는 많은 좌절을 겪었습니다. 켜져있는 동안 Enter를 클릭하면 열립니다.
nuoritoveri

1
적은 양의 우스꽝 스러움으로 zsh로 변경하십시오. 디렉토리 이름을 입력 할 때 해당 디렉토리로 변경되도록 설정하십시오. * .sh, * .c, * .config를 입력 할 때 vi에서 관련 파일을 여는 모든 것을 접미사 별명을 사용하십시오. 여기서주의 할 점은 익숙하지 않은 쉘에서 "vi"또는 "cd"를 생략 할 수 있다는 것입니다.
mkingston

3
어떻게 이런 일이 발생합니까?
JFA

답변:


38

vi디렉토리를 마지막 인수로 호출한다고 가정합니다 .

vi() {
    if [[ -d ${!#} ]]; then
        cd "$@"
    else 
        command vi "$@"
    fi
}

2
@Alex 이것은 "cd"대신 "vi"를 잘못 입력 한 드문 경우에 모두 적합하다고 생각합니다. 동시에 항상 "vi"를 입력하도록 가르쳐주십시오.) [즉, 자주하지 않기를 바랍니다. 스트레스를 줄이기 위해 해당 기능이없는 다른 서버 / 컴퓨터를 사용해야합니다 ...] [+1 해당 답변에 대한 답변은 "$ { 1} ""그리고 "$ {! #}"대신 "$ {1}"cd "
Olivier Dulac

5
@OlivierDulac는 합의 - 유사 위험한 앨리어싱됩니다 rmrm -i많은 배포판의 기본 인. 나는 일반적으로 문제를 해결하는 가장 좋은 방법은 문제를 해결하기보다는 사용자를 해결하는 것이라고 생각합니다.
Chris Down

3
@OlivierDulac 별명은 rm합니다 rm -i... 미래에 훨씬 더 많은 문제에서 당신을 얻을 (것이다 아마와) 당신에게 과거하지만 힘에서 몇 가지 문제를 저장 한 수
jlliagre

1
@Alex 글쎄, 당신은 vi질문에 말했다 ...
Chris Down

2
@crisron : ${!#}최종 인수를 간접적으로 참조 하며이 command경우 함수 재귀를 피하기 위해서만 필요합니다.
Chris Down

4

@ChrisDown 답변 외에도 다음과 같은 또 다른 방법이 있습니다. 바이 패스 디렉토리

이 방법으로 다음을 수행 할 수 있습니다.

vi ./*

하위 디렉토리를 포함하여 하위 디렉토리를 무시하더라도 현재 디렉토리의 모든 파일에서 vi를 시작합니다.

vi() {
  for arg do
    [ -d "$arg" ] || set -- "$@" "$arg"
    shift
  done
  [ "$#" -gt 0 ] && command vi "$@"
}

이것은 디렉토리가 아닌 모든 인수에 대해 vi를 수행하므로 "cd"에 "vi"를 사용하도록 지시하지는 않습니다.

vi 방금 수행 한 경우 vi를 호출하지 않습니다. vi somedirectory (예 : cd 대신 vi를 잘못 입력). 그러나 자동으로 CD가 나오지 않으므로 cd를 입력해야한다는 것을 기억하십시오 ^^

인수 목록을 변경하기 위해 "호환 가능한"방법을 사용하여 여러 플랫폼에 이식 가능했습니다.


1
참고 : command something: "something"이라는 별칭 또는 함수 대신 "something"명령 (예 : $ PATH를 사용하여 처음 발견 된 "something")을 시작합니다. \something별명 만 우회하지만, 존재하는 경우 여전히 기능을 수행합니다 (여기서 "vi"는 자체적으로 호출하고 반복 함을 의미합니다).
Olivier Dulac

@ChrisDown : 우리는 사용자에게 도움을주고 있습니다. 그리고 그 평가는 새로운 인수 (set-...)를 설정하는 것이므로 그 자체로 덜 위험합니다
Olivier Dulac

@StephaneChazelas : 편집 해 주셔서 감사합니다! 나는 그런 식으로 쓰려고 노력했지만 무한 반복 반복에 대해 걱정했다. 그러나 반복하지 않을 것이라고 믿는다. 내부 처리가 시작되기 전에 'arg'가 평가되므로 "$ @"목록이 '저장'되고 반복되며 내부 처리가 "$ @"를 변경하더라도 변경되지 않습니다.
Olivier Dulac

1

한 가지 해결책은 cd모두 사용을 중지하는 것 입니다. shopt -s autocd.bashrc또는 setopt autocd에 넣으 십시오 .zshrc. 그런 다음 다른 디렉토리로 변경하려면 명령없이 디렉토리 이름을 입력하십시오.

vi파일을 편집하려면 반드시 입력 해야합니다.

단일 명령으로 디렉토리를 변경하거나 파일을 편집하려는 경우 기능을 수행 할 수 있습니다.

vi () {
  if [ $# -eq 1 ] && [ -d "$1" ]; then
    cd -- "$1"
  else
    command vi "$@"
  fi
}

-6

Unix에서 별칭 기능을 사용하십시오. cd를 vi로 별명 지정하면 문제점이 해결됩니다.


5
... 이것은 vi별칭을 수동으로 재정의하지 않고 는 사용할 수 없다는 것을 의미합니다 .
Chris Down

3
이 대답은 약간 트롤처럼 나타납니다. 그것은 않습니다 영업 이익은 그들이 이제까지 파일 VI 필요로 지정하지 않은 한, 원래의 질문에 대답합니다. 대답은 다소 재미 있지만 확실히 유용하지는 않습니다.
gerrit

1
@ChrisDown 아니면 vim대신 적절한 것을 사용하도록 가르쳐 줍니다.
케빈

@Kevin vim은 vi보다 "적절하지"않습니다. 많은 시스템에서 vi는 사용 가능한 모든 것입니다.
Chris Down

1
@ChrisDown 나는 무엇을 기대하는지 아는 것이 낫다고 주장했다. vim 기능을 사용하려면을 사용하십시오 vim. 사용할 수없는 경우 vi더 제한된 기능 세트를 사용하십시오.
케빈
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.