다른 키맵으로 의사 삽입 모드를 만들려면 어떻게해야합니까?


9

나는 두 가지 다른 키보드 레이아웃을 정기적으로 사용하는 약간 특이한 위치에 있습니다 ( Programmers-DvorakTurkish-F ). 이 레이아웃은 서로 매우 다르며 한 세트의 근육 기억력으로 vim에 능숙합니다. Dvorak 레이아웃에서 vim 명령에 능숙하지만 키보드가 터키어 -F 레이아웃 인 경우 사용이 거의 불가능합니다. 불행히도 나는 정기적으로 영어와 터키어 및 혼합 언어로 파일을 편집합니다. 제 실력은 언어별로 키보드 레이아웃을 잘 입력 할 수 있지만 뇌는 언어를 교차 연결하지 않고 Dvorak 레이아웃에서 터키어로 단어 몇 글자를 입력하거나 그 반대로 입력하는 것입니다.

Xorg에서 레이아웃을 변경하기위한 두 가지 키 경례 바인딩이 있지만 혼합 언어 파일을 편집 할 때 vim의 작업 흐름이 어색합니다.

<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>

이것을 다음과 같이 단축 할 수 있기를 바랍니다.

<vim commands…><leader>i…content…<escape><vim commands…>

...을 사용 하면 시스템 키보드 레이아웃을 변경하지 않고 터키어 레이아웃을 에뮬레이션하기 위해 <leader>i많은 :imap값을 설정 합니다. 동시에 i추가 :imap값이 없는 삽입 모드로 전환 됩니다. 값 자체는 쉽지만 다음과 같은 알파벳 매핑이 필요합니다.

:imap a u
:imap A U
:imap o i
:imap O İ
"etc.

문제이며, 어떻게 설정이 개 삽입 모드로, 매핑의 무리를 제외하고는 동일하며, 어떻게 이러한 모드를 실행할 수있는 하나 개의 정상 삽입 모드와 모드를 삽입 한 의사 <leader>i, <leader>a등?


1
다른 아이디어는 다음과 같습니다 . 레이아웃을 자동으로 전환하는 데 사용할 수 있는 InsertEnterInsertLeaveautocmds가 있습니다. 특히 InsertLeave터키어인지 확인한 경우 Dvorak으로 전환하고 플래그를 설정 한 다음 insert를 다시 입력 할 때 삽입 모드를 마지막으로 종료 한 경우 터키어로 다시 전환하십시오.
Martin Tournoij

@ Carpetsmoker 문제가 어떻게 해결되는지 모르겠습니다. "확인"할 내용이 있어도 (내가 확인하고자하는 것이 무엇인지 잘 모르겠습니다 ... 문제의 일부는 단어 단위로 앞뒤로 이동한다는 것입니다), 그 이유 중 하나는 :imap원격 ssh 세션에서도 또는 $DISPLAY다르게 설정되지 않은 경우에도 작동 할 것이라고 생각 했습니다 .
Caleb

답변:


7

Vim은 키맵 형태로 이와 같은 것을 가지고 있습니다. 보낸 사람 :help mbyte-keymap:

When the keyboard doesn't produce the characters you want to enter in your
text, you can use the 'keymap' option.  This will translate one or more
(English) characters to another (non-English) character.  This only happens
when typing text, not when typing Vim commands.  This avoids having to switch
between two keyboard settings.

삽입 모드 전용 Caps Lock 은 Caps Lock의 에뮬레이션을위한 이러한 매핑을 설명합니다. 보시다시피, 맵핑 파일은 질문에서 간략하게 설명한 것과 유사합니다.

을 통해 :set iminsert=1또는 동적 으로이 설정을 사용하도록 설정합니다 i_CTRL-^. 또한 옵션 /search과 함께 작동합니다 'imsearch'.


3

Ingo Karkat의 답변 은 그것이 옳은 해결책 인 것처럼 보이며 내 상황을 해결했습니다. 그러나 여기 vim의 언어 맵 기능을 시작하는 다른 사람들을위한 조금 더 자세한 지침이 있습니다.

먼저 언어 맵 파일이 필요합니다. Caps Lock 예제에서와 같이 다음과 같은 것을 넣기를 원할 것입니다 ~/.vim/keymap/dvorak2turkishf.vim( Githu b 에서 전체 매핑을 다운로드하십시오 ).

let b:keymap_name = "dvorak2turkishf"
loadkeymap
; f
, g
. ğ
p ı
y o
f d
g r
" etc...

그 자리에 바인딩을 설정하여 바인딩을 설정해야하지만, 그렇지 않은 경우도 있습니다. ~/.vimrc파일 에 무언가를 추가하고 싶을 것 입니다.

먼저 검색 키맵을 입력 키맵에 바인딩하십시오.

set imsearch=-1

그런 다음 대체 언어 입력 모드에 사용할 키맵을 설정하십시오.

set keymap=dvorak2turkishf

대체 입력 모드를 끄면 기본적으로 변경 사항이 없습니다.

set iminsert=0

대체 언어 스위치를 끄려면 삽입 모드를 떠날 때마다 실행되도록 자동 명령을 설정하십시오.

autocmd InsertLeave * set iminsert=0

대체 언어 입력 모드에서 종료 될 수있는 모든 다양한 방법에 대한 바인딩을 추가하여 전환 하기 전에 <leader>(일반적으로 \) 를 사용 하여 언어 맵 swtich를 설정하십시오.

nnoremap <leader>i :set iminsert=1<Cr>i
nnoremap <leader>I :set iminsert=1<Cr>I
nnoremap <leader>a :set iminsert=1<Cr>a
nnoremap <leader>A :set iminsert=1<Cr>A
nnoremap <leader>c :set iminsert=1<Cr>c
nnoremap <leader>C :set iminsert=1<Cr>C
nnoremap <leader>r :set iminsert=1<Cr>r
nnoremap <leader>R :set iminsert=1<Cr>R
nnoremap <leader>o :set iminsert=1<Cr>o
nnoremap <leader>O :set iminsert=1<Cr>O

지도가 활성화 된 경우 다른 커서 색상을 설정하십시오.

:highlight Cursor guifg=NONE guibg=Green
:highlight lCursor guifg=NONE guibg=Cyan

모두 함께, 여기 내 구성에서 변경된 것이 있습니다. 마지막으로, 삽입 모드에있는을 사용하여 언어 맵 옵션을 켜거나 끌 수 있습니다 <ctrl>+^.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.