Farklı bir tuş eşlemeli sahte takma modunu nasıl oluşturabilirim?


9

Düzenli olarak iki farklı klavye düzeni ( Programcılar-Dvorak ve Türkçe-F ) kullanma alışılmadık bir durumdayım . Bu düzenler birbirinden oldukça farklıdır ve sadece bir dizi kas hafızasıyla vimde yetkin olabiliyorum. Dvorak düzenindeki vim komutları konusunda oldukça yetkinim, ancak klavyem Türkçe-F düzenindeyse kullanmak neredeyse imkansız. Ne yazık ki, dosyaları hem İngilizce hem de Türkçe ve hatta karışık dillerde düzenli olarak düzenliyorum. Yetkinliğim öyle ki, her iki dili de ilgili klavye düzenine yazabiliyorum, ancak beynim bunları çapraz bağlamayı ve Dvorak düzeninden Türkçe bir kelime birkaç harf bile yazmayı reddediyor ya da tam tersi.

Xorg'daki düzeni değiştirmek için iki tuşlu selam bağlarım var, ancak bu bile karışık dil dosyalarını düzenlerken beni vim'de garip bir iş akışı ile bırakıyor:

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

Bunu şöyle bir şeye kısaltmak istiyorum:

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

... kullanıldığında , sistem klavye düzenini değiştirmeden Türkçe düzenini taklit etmek için <leader>ibir grup :imapdeğer ayarlanır . Aynı zamanda, iek :imapdeğerler olmadan ekleme moduna geçecektir . Değerler kendileri kolaydır, sadece alfabe eşlemelerine böyle bir şeye ihtiyacım var:

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

Soru, nasıl kurulum iki uç modlarına, eşleştirmeleri bir demet haricinde aynıdır ve nasıl bu modları tetikleyebilir bir normal ekleme modu ve mod insert bir yalancı <leader>i, <leader>avb?


1
İşte farklı bir fikir: Düzenleri otomatik olarak değiştirmek için kullanabileceğiniz InsertEnterve InsertLeaveautocmds öğelerine sahipsiniz . Özellikle, InsertLeaveTürkçe olup olmadığını kontrol edebilirsiniz, eğer varsa, Dvorak'a geçin, bir bayrak ayarlayın ve ekleme girdiğinizde son ekleme modundan son çıkmanız durumunda tekrar Türkçe'ye geçin.
Martin Tournoij

@Carpetsmoker Bunun sorunlarımı nasıl düzelttiğini göremiyorum. "Kontrol etmek" için bir şey olsa bile (orada kontrol ettiğimi düşündüğünüzden emin değilim ... sorunun bir kısmı, kelime bazında kelime bazında ileri geri gitmek), nedenlerinden biri çizgileri boyunca düşünmek, :imapuzak bir ssh oturumunda bile veya $DISPLAYbaşka bir şekilde ayarlanmadığında çalışacağı yönündeydi .
Caleb

Yanıtlar:


7

Vim, böyle bir şey tuş haritaları şeklinde var . Gönderen :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.

Yalnızca ekleme modu Caps Lock , Caps Lock öykünmesi için böyle bir eşlemeyi açıklar; orada gördüğünüz gibi, eşleme dosyası sorunuzda ana hatlarıyla belirttiğinize benzer.

Bu ayarı şu şekilde :set iminsert=1veya üzerinden dinamik olarak etkinleştirirsiniz i_CTRL-^. Ayrıca seçenek /searchile çalışır 'imsearch'.


3

Ingo Karkat'ın yanıtı tam olarak doğru çözüm gibi görünüyor ve durumumu çözdü. Bununla birlikte, vim'in dil haritası işlevlerine yeni başlayan herkes için biraz daha ayrıntılı talimatlar.

Öncelikle bir dil harita dosyasına ihtiyacınız var. Caps Lock örneğinde olduğu gibi ~/.vim/keymap/dvorak2turkishf.vim( Githu b'den tam eşlememi indirin) içine aşağıdakine benzer bir şey koymak istersiniz :

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

Bu durumda, bazı durumlarda onu etkinleştirmek için bağları kurmaya devam eder, ancak diğerlerini değil. ~/.vimrcDosyanıza bir şey eklemek isteyeceksiniz .

İlk olarak, arama tuş haritasını girişe bağlayın:

set imsearch=-1

Ardından, alternatif dil giriş modu için hangi tuş haritasının kullanılacağını ayarlayın:

set keymap=dvorak2turkishf

Alternatif giriş modunu kapatın, böylece varsayılan olarak değişiklik olmaz:

set iminsert=0

Alternatif dil anahtarını kapatmak için ekleme modundan çıkarken çalıştırmak için bir otomatik komut ayarlayın:

autocmd InsertLeave * set iminsert=0

Alternatif dil giriş modunda karşılaşabileceğiniz tüm çeşitli yollar için bağlamalar ekleyin, böylece geçiş yapmadan önce <leader>(Genellikle \) kullanıldığında dil haritası anahtarını açık konuma getirin:

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

Harita etkinleştirildiğinde için farklı bir imleç rengi ayarlayın:

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

Hep birlikte, işte benim yapılandırma değişti . Son bir not olarak, ekleme modunda olduğunuzdan birini kullanarak dil haritası seçeneğini açıp kapatabilirsiniz <ctrl>+^.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.