set -o vi 사용의 장점


55

많은 개발자 가이 명령을 사용하여 옵션을 vi로 설정하는 것을 보았습니다. 나는 이것의 실제 사용을 이해하지 못했습니까?

bash 명령을 사용할 때 vi로 전환하면 어떤 도움이됩니까?

답변:


58

readline 편집을 emacs (기본값) 또는 vi ( set -o vi)로 설정하면 쉘과 선택한 편집기에서 편집 명령을 기본적으로 표준화 할 수 있습니다 1 .

따라서 쉘에서 명령을 편집하려면 텍스트 편집기에있을 때와 동일한 명령 2 를 사용하십시오 . 즉, 하나의 명령 구문 만 기억하면되고 (충분하지 않은 경우) 두 환경 모두에서 편집 속도가 빨라지고 오류가 발생하기 쉽습니다.

쉘 히스토리에서 명령을 가져 와서 Escape명령 모드로 들어간 다음을 누르면 vi 모드에서이 관계를 더욱 활용할 수 있습니다. 그러면 vvim의 모든 기능을 사용하여보다 복잡한 편집을 위해 명령이로드되어 $ EDITOR가 열립니다. 명령을 만족스럽게 편집하면 :wq쉘에서 명령이 다시 실행됩니다.


물론 Emacs 또는 Vi / m을 편집기로 사용한다고 가정합니다.
또는보다 정확하게는, 그 하위 집합


1
나는 성배를 얻었다
:)

3
Esc-v 트릭은 set -o vi대부분의 사람들이 모르는 최고의 기능 중 하나입니다 . 여러 명령 행 명령과 같이 다른 인수로 동일한 명령을 여러 번 발행하려는 경우 특히 그렇습니다.
Michael Goldshteyn

2
Esc-v 트릭은 실제로 특정 이점이 아닙니다 set -o vi. set -o EMACSCx, Ce 의 기본 설정 $EDITOR에서 명령을 실행하기 전에 명령을 편집 할 수 있는 emacs 창 (또는 설정된 경우)이 나타납니다.
John Gowers

8

Vi 모드는 Android 용 ConnectBot와 같은 모바일 SSH 클라이언트를 사용하는 경우 유용성이 크게 향상되었습니다.

수정 자 키에 대한 의존도가 감소했기 때문입니다.

Vim은 안드로이드 UI에 내장 된 기본 편집 방법을 포함하여 스마트 폰이나 태블릿의 가상 키보드를 사용하는 것보다 훨씬 쉽습니다. 아이러니하게도 SSH 세션에서 Vim을 사용하여 C 소스를 편집하는 것이 플랫폼 목적의 편집 위젯으로 인스턴트 메시지를 편집하는 것보다 쉽습니다.

Shell vi 모드는 비슷한 이점을 제공합니다.


전화 키보드에 vi 모드가 있기를 바랐습니다. 당신은 이것이 이미 존재하는 것처럼 언급합니다. 휴대폰에서 vi 모드를 얻으려면 어떻게합니까?
meh

6

vi 모드와 조작을 사용하여 명령 행에서 내용을 편집 할 수 있습니다.

예를 들어 훨씬 명확하게 만들 수 있습니다.

당신은 입력 cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

그러나 오류가 발생했습니다-입력 file1.txt하지 않아야합니다file1.xt

이 옵션을 설정 하지 않으면 위쪽 화살표를 누른 다음 왼쪽 화살표를 누르고 ...에 도달 할 때까지 35 번 반복 .xt한 다음 extra를 입력하십시오 t. 총 키 스트로크 : 37 .

함께 이 옵션을 사용하면 키를 누릅니다 (예를 들어)를 한 번 위쪽 화살표 수 있습니다 설정 한 다음 줄의 시작으로 이동 명령 모드, 0 탈출 한 후 /xt[return]받는 얻기 위해 xt그리고 당신은 입력 할 수 i삽입 모드 및 누락 t를 입력합니다. 이것은 어떤면에서 미친 듯이 복잡해 보이지만 vim 사용자 인 경우 이러한 명령은 이미 잘 알려져 있습니다. 총 키 스트로크 : 9


1
Emacs 모드에서도 몇 가지 Alt+B또는 A Ctrl+Alt+] .를 사용할 수 있으므로 이것은 나에게 강력한 예가 아닙니다.
Mikel

2
우리가 골프를하고 같이보고 : 이맥스 모드 : Up, Ctrl+Alt+], ., Right, t, Enter= 8 바이올렛 모드 : Up, F, ., a, t, Enter= 7 :
미켈

@Mikel vi 모드가 인서트 모드에서 시작한다는 것을 잊어 버렸습니다 Esc.
dragon788

5

직접적인 이점이 있는지 확실하지 않습니다. 저는 vi20 년 넘게 사용자였습니다. 나는 또한 screen더 오랫동안 사용자이며 vi키 를 사용하는 다른 프로그램을 사용 합니다. bash에서 "vi"모드를 설정하는 것을 선호하는 것은 당연합니다. 그러나 나는 또한 내 업무에서 수백 대의 서버에서 작업하며 대부분은 기본 "emacs"모드로 설정되어 있습니다. 따라서 두 모드를 모두 사용해야합니다. 그러나 그것은 실제로 선호의 문제입니다.


나에게 비슷한 상황-vim을 많이 사용하지만 항상 줄 전환을 추가하는 것보다 기본 emacs와 같은 readline 키 (vi 하위 집합만큼 편리 할 수 ​​있음)에서 능숙 해지는 것이 더 적은 것으로 나타났습니다. 내가 만나는 모든 새로운 시스템에서 vi 모드로.
jw013

1
수백 대의 서버에서는 작동하지 않지만 sshrc 를 사용하여 ssh 를 사용 하여 다른 컴퓨터간에 bash 설정을 비슷하게 유지 ssh합니다. 물론, 내 .bashrc물건 이없는 로컬 컴퓨터를 사용할 때 도움이되지 않습니다 .
Kyle Strand

4

주요 이점은 명령 줄을 모달 편집하는 것입니다. Vim에 익숙하고 철학이 마음에 든다면 이점이 분명해야합니다. 당신이 그것에 경험이 있다면, 손가락의 근육 기억이 당신을 bash 명령을 매우 빠른 속도로 편집하게 할 것입니다.

주의 : 모달 편집이 마음에 들지 않으면 (기본) emacs 모드를 활용하는 법을 배워야합니다. 와 같은 모든 프로세스에서 작동하는 멋진 키보드 단축키는 다음readline같습니다 bash.


1

에 익숙해지면 vi쉘 편집기로 vi 모드로 설정합니다. 그것은 명백한 이유 일 것입니다. 다른 하나는 때입니다 bash일부 운영체제 (AIX, 솔라리스와 같은 대부분 UNIX)에서 기본적으로 사용할 수 없습니다, 그래서 쉘 히스토리 기능을 사용할 수 없습니다, 그래서 방법은 당신이 셸 편집기를 설정하여 과거의 명령을 취득 vi하고 Esc, Ctrl+ K또는 Ctrl+L


1

vim의 단축키를 사용하여 명령 줄을 쉽게 탐색하고 편집 할 수 있습니다. 예를 들어 한 단어로 빠르게 이동하고 단어를 삭제합니다.

기본 단축키로는 줄 끝으로 가야 할 때 Ctrl+ 가 필요 e하지만을 사용 set -o vi하면 $vim 에서처럼을 누르십시오 .


1

아마도 파티에 늦었을 수도 있지만 vi 모드를 사용하는 것은 대화 형 스크립을 만들 때 더 중요합니다.

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

매우 복잡한 것의 아주 간단한 예입니다.를 사용 ESCkv하면 스크립트를 수정할 수있는 vi 세션으로 이동 한 다음 :wq실행됩니다.


1
이것은 vi모드에서 bash를 사용하는 좋은 예일 수 있지만 bash 코드의 나쁜 예입니다. (1) 출력을 ls다른 종류의 처리에 대한 입력으로 사용 하는 것은 나쁜 생각입니다. (2) $(…)명령 대체 `…`구문 은 구문 보다 읽기 쉬운 것으로 널리 간주됩니다 . (3) 타당한 이유가없는 한 항상 쉘 변수를 인용해야하며 자신이하고있는 일을 확실히 알고 있어야합니다.
G-Man
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.