vim에서 화살표 키를 비활성화하는 방법은 무엇입니까?


24

나는 홈 행에 머무르기 위해 화살표 키를 사용하는 것보다 hjkl을 사용하는 것을 스스로 가르치고 싶습니다. 그리고 네, hjkl을 기본 탐색 키로 사용해서는 안된다는 것을 잘 알고 있습니다. 그러나 내 습관은 상당히 강하며 화살표 키로 손을 움직 였으므로 그것을 배우고 싶지 않습니다.

그 습관을 깨기 위해 : hjkl 또는 다른 탐색 방법을 사용하도록 화살표 키를 어떻게 비활성화 할 수 있습니까?

보너스로, Dont't use this!필수 메시지 가 아님에도 불구하고 도움이 될 것 입니다. 그들이 효과가 없다면, 습관을 다시 생각할만큼 혼란 스러울 것입니다.


4
그렇게하는 데는 아무런 의미가 없습니다. HJKL은 화살표만큼 빨라요.
romainl

6
@romainl은 vim의 강력한 동작 ( w다음 단어, }다음 단락, n다음 검색 결과 일치, 현재 줄에서 fz다음 발생 z등) 을 사용하는 것에 초점을 맞추는 것이 더 중요하다고 지적 할 수 있습니다 . 단일 문자로 세분화됩니다. 나는 이것에 분명히 동의한다. 그러나 HJKL은 홈 키에서 손을 움직일 필요가 없다는 점에서 화살표 키보다 확실히 좋습니다. 나는 종종와 같은 것을 타이핑 할 것이다 jA. 이것은보다 빠르며 <Down>A어떤 모션에서도 실제로 이길 수는 없다.
wchargin

4
@ romainl : 나는 전에 당신과 함께이 토론을했다고 생각합니다. 비-빔 머는 화살표에 사용되며 HJKL에는 사용되지 않습니다. 이상적으로도 사용하고 싶지 않습니다. 그러나 HJKL이 아닌 화살표를 차단하면 사람들이하고있는 일을 일시 중지하고 반영 할 수 있습니다 (HJKL이 실제로 최선의 선택 일 경우 또는 사용자가이를 수행하는 방법에 문제가있는 경우 대안으로 열려 있음) 더 강력한 동작). 즉, HJKL을 배우는 것이 아니라 다른 편집자들이 배운 자동화를 차단하는 것입니다.
Amadan

1
@Carpetsmoker hjkl 키의 확실한 장점은 홈 행을 떠날 필요가 없습니다. 화살표 키의 경우 손이 키보드를 가로 질러 움직여야합니다.
k0pernikus

1
@Carpetsmoker 확실히 나에게 기분이 좋아집니다. ;)
k0pernikus

답변:


24

당신은 설치할 수있는 플러그인 hardmode을 하고에 .vimrc넣어

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

당신이 플러그인을 사용하지 않으려는 경우, 사용 (당신이 모든 것을 직접 사용자 정의 할 수로, 더 나은 선택이 될 수있다!) nnoremap, vnoremap그리고 inoremap<Left>, <Right>, <Up>, <Down>, <PageUp><PageDown>, 예를 들어 :

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>

1
도 있습니다 <nop>당신은 모두 키 맵을 사용하지 않으려면 : nnoremap h <nop>.
akshay

25

귀하 또는 다른 사람이이 주제를 읽고있는 경우 텍스트 경고없이 키 이동을 비활성화하려면 .vimrc에 다음 행을 입력하십시오.

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

명령은 정상 모드에서만 키 이동을 비활성화합니다. 그들은 여전히 ​​삽입 모드에서 작동합니다. inoremap을 사용하면 화살표 이동도 삽입 모드에서 제거됩니다.

noremap, nnoremap, inoremap 등의 차이로이 다량으로 인기있는 주제의 거래 : 빔에 다시 매핑

리매핑에 대한 일반적인 아이디어는 다음과 같습니다.

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

따라서 다른 예제에서는 왼쪽 명령을 텍스트 프롬프트로 다시 매핑하여 실제로 커서를 움직이는 동작을 제거합니다. 위에서 제시 한 예는 단순히 다른 작업이 아닌 다른 작업에 대한 작업을 다시 매핑합니다. vim 기능을 대체하는 것이 아니라 제거하는 것을 고려하십시오.


2

.vimrcCommand, Insert, Normal 및 Visual Mode에서 화살표 키를 비활성화 하기 위해 이것을 추가 할 수 있습니다 .

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

참고 ::help map-overview 다른 유형의 매핑에 대한 자세한 내용은 Checkout


1
noremap ... ...(일반, 시각적, 선택 및 운영자 보류 모드) 및 noremap! ... ...(삽입 및 명령 행 모드) 를 사용하여 필요한 명령 수를 줄일 수 있습니다 .
Jürgen Krämer

참된. noremaps영향을받는 모드를 사용자 정의하려는 사람 에게보다 명백한 것이 도움이 될 것이라고 생각했습니다.
NonlinearFruit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.