"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는 합의 - 유사 위험한 앨리어싱됩니다 rm에 rm -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.