"Vim에서는 절대 화살표 키를 사용하지 마십시오!"
나는 무작위 연사로부터 이것을 들었지만 그에게 그 이유를 물을 기회는 없었습니다. 또한 화살표 키를 사용하지 않으면 삽입 모드 에서 커서를 어떻게 이동할 수 있습니까?
"Vim에서는 절대 화살표 키를 사용하지 마십시오!"
나는 무작위 연사로부터 이것을 들었지만 그에게 그 이유를 물을 기회는 없었습니다. 또한 화살표 키를 사용하지 않으면 삽입 모드 에서 커서를 어떻게 이동할 수 있습니까?
답변:
화살표 키를 사용하면 나쁜 습관으로 간주됩니다. 화살표 키를 사용하는 경우 많은 vim의 멋진 기능이 빠져있을 수 있습니다.
사람들이 vim을 처음 사용하기 시작하면 기존 텍스트 편집과 비슷하기 때문에 삽입 모드를 유지하는 경향이 있습니다. 그러나 vim에서 효과적이기 위해서는 실제로 텍스트를 입력 할 때만 삽입 모드에 있어야합니다. 커서를 움직이려면 일반 모드에 있어야합니다. 기본적으로 일반 모드에 있어야합니다.
일반 모드에서는 움직일 수있는 백만 개의 단축키가 있습니다. 당신은 사용할 수 있습니다 hjkl
한 번에 하나 개의 공간을 이동하거나 그렇게에 단어, 단락에 의해 이동할 수 있습니다. 정상 모드 인 경우 화살표 키 hjkl
가 더 멀리 있기 때문에 대신 화살표 키를 사용할 필요가 없습니다 .
화살표 키를 사용하는 경우 vim "잘못된"을 사용하는 태도가 있습니다. 진실은 vim이 정말로 가파른 학습 곡선을 가지고 있기 때문에 배우는 동안 당신이 제정신을 유지하는 모든 것을하십시오. 처음으로 vim을 사용하기 시작했을 때 모든 것을 "잘못된"방법으로 수행했으며 vim의 명령을 더 많이 배우면 습관을 깨는 데 아무런 문제가 없었습니다.
예를 들어, 처음 시작할 때 텍스트를 따옴표로 바꾸고 싶다고 가정 해보십시오.
String mystring = "I want to change this";
삽입 모드로 이동하고 화살표 키를 사용하여 문자열의 끝으로 이동하고 문자열이 사라질 때까지 백 스페이스를 누른 다음 새 텍스트를 입력합니다.
훨씬 더 좋은 방법은 커서를 문자열의 아무 곳에 나 두는 것 (일반 모드)을 누르십시오 ci". 이것은 것 change
in
"
입니다. 따옴표 사이의 모든 것을 삭제하고 새 텍스트를 입력 할 수 있도록 삽입 모드로 전환합니다.
ci<
그리고 ci)
잘 작동하므로 키보드에서 마우스로 손을 움직일 필요가 없습니다. 괄호의 시작 부분으로 이동 한 다음 내용을 변경하려면 f(ci(
작동합니다.
/want
Enter 키를 눌러 'want'라는 단어를 입력 한 다음 수행 할 수 ci"
있습니다.
hjkl
) : 매핑 up
과 down
서로 수직 구별이 키는 왼쪽과 오른쪽 키에서 ..... 그것의 홀로 비극적 인 이데올로기 맹검 오만의 데모.
간단히 말해, 키는 화살표로 표시된 이전 "ADM-3A"터미널의 나머지이기 때문에 탐색 인터페이스로 Vim
사용합니다 hjkl
.
이후
vim
에서 파생 된vi
, 동일한 hjkl 키를 사용한다.
화살표 키의 문자 기반 대체를 사용하면 표준 입력 구성에서 손을 떼지 않고도 텍스트 를 탐색 할 수 있습니다 . 화살표 키를 누르기 위해 손을 움직이는 것보다 훨씬 효율적이고 빠릅니다. 참조 # 2 (자료 참조)에 설명 된 것처럼 이것이 장점의 끝은 아닙니다. VIM에는 손을 움직이지 않고도 액세스 할 수있는 다른 바로 가기가 많이 있습니다.
귀하의 질문의 두 부분에 대한 매우 상세하고 정확한 답변이 있습니다. 화살표 키 교체 측면에서, 나는 빠르고 요약 된 방식으로 답변 했지만 귀하의 삽입 질문 에 대해서는 아래 나열된 리소스를 참조하십시오.
hjkl
삽입 모드에서는 작동하지 않으므로 질문에 대한 답변은 어떻습니까?
hjkl
vim에서 사용할 수 있다는 사실은 내가 자전거를 타고 일을 할 수 있다는 사실이 누군가가 왜 조깅하지 말라고 설명하지 않는 것처럼 누군가가 화살표 키를 사용해서는 안되는 이유를 말해주지 않습니다.
이 멍청한 만트라는 종종 홈 행이 두 번째 척추와 같은 터치 타이피스트 또는 시원하게 보이고 싶어하는 비 터치 타이피스트에 의해 반복됩니다. 터치 타이피스트가 아닌 사람들에게 홈 행은 그다지 특별하지 않으며 오른쪽 손을 약간 움직여 화살표에 도달하는 것은 전혀 문제가되지 않습니다.
고려해야 할 중요한 것은 그 만트라를 반복하는 사람들이 대신 사용할 것을 제안하는 것입니다.
대부분의 경우을 (를) 사용한다고 주장합니다 hjkl
.
vi의 저자가 사용하는 키보드에 물리적 화살표 키가 없기 때문에 이러한 키만 사용된다는 사실을 배제하면 화살표 키에 대한 모든 주장은 합리화이므로 hjkl
화살표보다 약간 더 좋습니다. 그렇습니다 hjkl
. 화살표 를 사용하는 것의 유일한 장점은 오른손의 작은 움직임을 화살표로 건너 뛰는 것입니다. 그 혜택이 문제의 가치가 있는지 여부는 당신의 전화입니다.
그러나 오른손의 움직임이 화살표 만 사용 하는 것이 비효율적 인 이유는 아닙니다 . 텍스트를 편집하는 데 필요한 대부분 의 이동 범위가 훨씬 더 큰 반면 문자별로 이동하고 줄 단위로 이동하는 것을 제한하기 때문에 비효율적 입니다.
오른쪽 화살표를 13 번 망치는 것은 비효율적이며 지루합니다. 그것은이다 그 망치 더 잘 l
키 13 번? 아닙니다. 똑같이 바보입니다.
목표에 도달 할 때까지 오른쪽 화살표를 누르는 것은 지루하지는 않지만 오류가 발생하기 쉽고 끝에서 필요하고 비 결정적 인 속도 저하로 인해 13 번의 타격만큼 비효율적입니다. 그것은이다 것을 더 유지하기 위해 l
키를 누르면를? 물론 아닙니다.
고맙게도 대부분의 GUI 툴킷은 Ctrl+Right
단어 단위로 이동하거나 EOL, 다음 단락 또는 기타로 이동할 수 있는 콤보를 제공합니다 . 이 단축키는 단일 화살표보다 훨씬 빠르고 지능적으로 탐색하는 데 도움이됩니다. 우리도 같은 hjkl
가요? 아닙니다. 원하는 경우 카운트를 사용할 수 있지만 모든 모션에 대해 문자를 계산하려는 사람은 누구입니까? 수행 14k
의 도움은 relativenumber
큰하지만 수평 움직임에 대해 무엇입니까? 큰 움직임의 hjkl
경우 실제로 수정 자 + 화살표보다 더 나쁩니다. 그리고 무엇을 추측합니까? 큰 움직임이 가장 필요합니다.
그러나 우리는 운이 나쁜 놈이다, 우리가 제일 좋아하는 편집기는 모두 화살표 주위에 동그라미를 실행 동작 다스가 와 hjkl
: bBeEwW/?*#{}()
등등하고있다. 이 명령은 헤아릴 수 보다 더 힘을 실어 hjkl
당신이 사용하는 경우 훨씬 더 논리적이고 직관적 대부분의 Ctrl+Right
친구.
에서 전환 <Right><Right><Right><Right><Right><Right><Right><Right><Right>
에 lllllllll
짝수 또는 것은 9l
터무니없이 무의미하다.
에서 <Right><Right><Right><Right><Right><Right><Right><Right><Right>
로 전환 하는 <C-Right>
것이 훨씬 좋습니다. 거기서부터 w
쉽고 빠르게 전환 할 수 있습니다. <nop>
당신의 화살이 필요 없습니다 !
이러한 명령이보다 유용하고 강력하고 직관적 인 경우 hjkl
, 왜 이렇게 많은 블로거들과 주석가들이 화살표를 다음과 같이 바꾸어야 hjkl
합니까?
나는 가지고있다. 몰라.
결론적으로, hjkl
우리는 항상 2 문자 또는 줄씩 이동해야하지만 숲을 숨기는 나무가 아닌 나무이기 때문에 툴 벨트에 자리를 잡으십시오. 사람들이 화살에 대해 설교하는 것에주의하십시오.
hjkl
것은 쓸모 없지만 hjkl
유용합니다.
다른 사람들은 왜 커서를 움직이는 다른 방법이 선호되는지에 대해 설명했지만, 화살표 키를 사용하는 것이 나쁜 생각으로 여겨지는 이유는 무엇입니까?
필자는 VT100과 같은 터미널 시대에 화살표 키 가 실행중인 프로그램에 의해 해석 된 이스케이프 시퀀스 를 생성 했기 때문에 주된 이유 (및 @Squeezy가 다소 암시)를 생각합니다 . 화살표 키는 ASCII로 표시되지 않으므로 화살표 키 입력은 "특별한"방식으로 전달되어야합니다. 이스케이프 시퀀스는 일반적으로 다음과 같습니다.
ESC [ A
터미널의 속성, 연결 및 커서 모드 에 따라 다릅니다 . 쉘이나 프로그램이 터미널에 맞게 올바르게 구성되어 있지 않으면 이스케이프 시퀀스를 화살표 키로 이해하지 못할 것입니다.
대학에있을 때 VT100 터미널을 통해 Ultrix에 로그인 할 때 삽입 모드에서 vi를 사용하는 동안 화살표를 누르면 ESC
"삽입 모드에서 나가기" [ A
로 해석되고 다음 은 정상 모드 명령으로 해석됩니다. . 분명히 사용자가 원하거나 기대하는 것이 아닙니다!
오늘날 터미널 및 화살표 키 처리는 특히 GUI 환경에서 더욱 강력 해 보입니다. 그러나 SSH 또는 Telnet을 통해 vim을 사용할 때도 동일한 문제가 발생합니다.
화살표 키를 사용하면 QWERTY 레이아웃을 사용할 때 홈 행에서 또는 Dvorak을 사용할 때 문자 패드 (?) 또는 다른 레이아웃에서 손가락을 강제로 움직이기 때문에 눈살을 찌푸립니다.
화살표 키는 1200 보드 모뎀과 같이 느린 연결에서 이미 알려진 것으로 알려진 문제를 나타냅니다. 화살표는와 같은 ESC 시퀀스로 변환됩니다 ESC a
. 이제 ESC와 시간 사이에 시간이 너무 길면 BEL (또는 깜박임)이 들리고 추가 모드가 나타납니다. hjkl
키 와 함께 나타나지 않습니다 .
ESC [ A
당신이 말하는 것을 생각 합니까?
ESC [ A
DEC VT-100 터미널 (ANSI 터미널은 DEC VT-100에서 파생 된 것임) 화살표입니다. IIRC ESC A
는 ADM-3A 화살표 또는 DEC VT-52 화살표였습니다. 포인트는 동일하지만 ESC
화살표 키의 일부로 전송 된 문자는 ESC
수동으로 입력 한 문자 와 쉽게 혼동됩니다 .
두 번째 질문과 관련하여 :
[I] 화살표 키를 사용하지 않으면 삽입 모드에서 커서를 어떻게 움직일 수 있습니까?
마스터이고 따라서 화살표 키를 경멸하는 사람에게는 "모드"라는 개념이 존재하지 않습니다.
마스터는하지 삽입 모드를 사용하여 새로운 텍스트가 아니라 완전한 삽입 또는 교체 추가 명령 과 같은 연산 코드로 시작 i
, o
또는 cw
그 페이로드 텍스트 다음에 의해 종료됩니다 ESC
. 명령에는 구문이 있으므로 기계는 명령 구문을 승인 할 때 상태를 통과하지만 편집기의 마스터 모델에서는 모드를 생성하지 않습니다. 견습생이 순진하게 "모드"라고 부르는 것은 마스터에게 피할 수없는 가장 끔찍한 상황 인 미완성 된 명령 상태입니다.
삽입 또는 바꾸기 명령의 중간에 마스터가 인식 할 때마다 커서가 나타내는 다음 문자 위치가 아닌 다른 텍스트를 삽입하거나 삭제해야합니다. 마스터는 삽입 명령을 종료하고 수십 가지 효율적인 중 하나를 해제합니다 이동 명령 ( hjkl
보다 강력한 방법이 분명히 적용 가능하지 않은 경우 낮은 수준으로 복원 ).
또한, 명령을 미완성 상태로 두는 방식으로 마스터가주의를 산만하게하는 경우가 거의 없으므로, 마스터는 "만약의 ESC
경우"발행 된 불필요한 항목으로 인해 편집기에서 경고음을내는 경우가 거의 없습니다 .
(그러나 네트워크에 지연이 발생하거나 머신이 다운 된 경우 마스터는 ESC
다른 모든 사람과 마찬가지로 키를 격렬하고 반복적으로칩니다.)
vi
의이 공정하게 다음 명령 항목이 모드 삽입, 우리는 다른 편집기에서 이러한 모든 모드를 식별하고 모달을 호출해야합니다. 예를 들어, Emacs에서 Ctrl-X를 눌렀을 때, 우리는 "모드"에 있습니다. 예를 들어, Ctrl-S를 눌 러 문서를 저장하면 해당 "모드"외부에서는 작동하지 않습니다.
그렇습니다. 위에서 언급 한 많은 이유 vi
에서 원래 사용하도록 작성 hjkl
되었지만 " never "는 매우 큰 진술입니다.
vim
원하는대로 작동 하도록 수정 (및 사용하는 다른 도구) 하는 경향 이 있습니다. 이것은 내 컴퓨터에서 훌륭하게 작동하지만 임베디드 개발자로서 항상 내가 지원하는 컴퓨터의 항목을 선택하지는 않습니다. 가끔 hjkl
탐색 만하는 구형 컴퓨터를 발견 vi
했습니다. 습관을 끊고로 전환 할 때까지 제어 코드를 파일에 2 ~ 2 초 동안 삽입하게됩니다 hjkl
.
"Vim에서 화살표 키를 절대로 사용하지 마십시오!" 화살표 키를 처리 할 수없는 기계를 사용할 수 있습니다. 그것은 " 절대 " 라고 말하는 아주 얇은 이유처럼 느껴집니다 .
화살표 키를 사용하지 않으면 삽입 모드에서 커서를 어떻게 움직일 수 있습니까?
화살표 키를 사용하지 못하게하는 주된 이유 는 삽입 모드에서 이동할 수 있기 때문 입니다.
초보자를위한 vim 학습의 가장 이상한 문제 중 하나는 vim의 실행 취소 명령 이 마지막 키 입력이 아닌 마지막 동작 을 취소하여 작동한다는 것 입니다. 내 친구 중 상당수는 계속 떠날 이유가 없기 때문에 전체 시간 동안 삽입 모드를 유지합니다. 그들이 나에게 물으면 "어떻게 취소할까요?" vim이 전체 파일을 지울 때 좌절감을 느끼는 "명령 모드에서 문자 u를 누르십시오"라고 답장합니다.
"Vim은 일을 제대로 취소 할 수 없다면 꽤 쓸모없는 텍스트 편집기입니다."
방법을 배우기 전에 도구를 사용하기가 어렵습니다.
Vim은 사용법을 익힌 후에 만 유용합니다. vim의 힘은 무의식적 인 근육 기억을 통해 "다시 그 일을 다시"또는 "그 일을 취소 할 때"또는 "이 매크로 단축키를 눌렀을 때만 그 일을하는"방법을 알려줍니다. 만약 "그것"이 "처음부터 끝까지 전체 파일을 입력하십시오"가되면, vim은 그다지 유용하지 않다는 데 동의합니다.
따라서에있을 때만 텍스트를 입력해야합니다 insert mode
. 화살표 키를 피하는 것은 우리가 더 나은 vim 사용자가되고 더 빨리 돕는 데 도움이되는 방법 중 하나 일뿐입니다.
kbox에서 ssh 데몬을 실행하는 Android 장치에 셸을 넣은 상태에서 vim을 실행하면 편안한 영역에서 벗어날 수있었습니다. 장치의 Anroid 터미널 에뮬레이터는 볼륨 키를 사용하여 특수 키 콤보 (ctrl + 무엇이든)를 대체하므로 키보드에서 일반적으로 사용하는 일부 키는이 상황에서 작동하지 않습니다.
예를 들어,이 환경에서는 삽입 키가 작동하지 않으므로 I
삽입 모드로 전환하는 데 사용 하고 있습니다. 일반적으로 삽입 모드를 이스케이프하는 데 사용하는 Esc 키가 작동하지 않으므로 ctrl + [
대신 이스케이프를 사용하고 있습니다. 익숙한대로 Home 및 End 키가 작동하지 않습니다. 대신 나는 줄의 시작이나 끝에 도달하기 전에 결코 신경 쓰지 않은 바로 가기 0
와 $
단축키 에 의존 하고 있습니다.
어쨌든, 화살표 키는 여전히 내 상황에서 평소와 같이 작동하지만 미니멀리스트 키보드 단축키가 있다는 것을 아는 것이 좋습니다.
여기 내 2 ¢입니다.
편안하다고 느끼는 것을하십시오. 다른 편집기를 사용하는 경우 일관성을 위해 화살표 키를 사용하는 것이 더 쉬울 수 있습니다.
반면, vi (및 vim)에는 특별한 키가 필요하지 않습니다. 아마도 예외입니다. 터미널로 기능하기 위해 이전 IBM selectric을 해킹 할 수 있습니다.
주의해야 할 또 다른 사항은 화살표 키가 예상대로 작동하지 않을 수 있다는 것입니다. 작동하지 않는 터미널을 사용했습니다. Vim에서 어떻게 구현되는지 확실하지 않지만 균일하지 않다고 확신합니다. 내 희귀 한 기억조차도 vim 매크로로 구현 된 하나의 구현을 회상하는 것 같습니다.
향상된 텍스트 편집기가있는 게임의 이름은 "서둘러 움직여"낭비 / 반복적 인 움직임을 줄이는 것으로 보입니다. 문자 키에서 화살표 키 (키보드 치수에 따라 다름) 로 이동하고 홈 행으로 돌아갈 때까지 시간 이 조금 걸립니다 . 그러나 왼손 핑키 또는 링 핑거 전환 모드를 사용하여 ESC 키를 얻을 수있는 경우 하나의 유동적 인 동작이되고 편집 세션 중에 속도가 향상됩니다.
그리고 이것은 질문의 두 번째 부분의 열쇠입니다. 왼쪽으로 ESC를 누르고 오른쪽으로 hjkl로 이동하여 삽입 모드에서 빠져 나옵니다. 결국 비트를 건너 뛰지 않고이 작업을 수행 할 수 있습니다.
그건 내가 언급 한 몇 가지 시도까지 내가 빔 어디에서나 없었어 말했다되고 여기를 은 "있는 가장 중요한 : 단축키 매핑 효율을 얻기 섹션"