Saya berada dalam posisi yang agak tidak biasa menggunakan dua tata letak keyboard yang berbeda secara teratur ( Programmers-Dvorak dan Turkish-F ). Layout ini sangat berbeda satu sama lain dan saya hanya bisa mahir dalam vim dengan satu set memori otot. Saya cukup mahir dengan perintah vim di tata letak Dvorak, tetapi hampir mustahil untuk digunakan jika keyboard saya ada di tata letak Turkish-F. Sayangnya saya secara teratur mengedit file dalam bahasa Inggris dan Turki dan bahkan bahasa campuran. Kemahiran saya sedemikian rupa sehingga saya bisa mengetik bahasa mana pun di tata letak keyboard masing-masing dengan cukup baik, tetapi otak saya menolak untuk menyilangkannya dan mengetikkan bahkan beberapa huruf kata dalam bahasa Turki dari tata letak Dvorak atau sebaliknya.
Saya memiliki binding dua kunci salut untuk mengubah tata letak di Xorg, tetapi bahkan ini membuat saya dengan alur kerja yang canggung dalam vim saat mengedit file bahasa campuran:
<vim commands…>i<switch to tr>…content…<escape><switch to en><vim commands…>
Saya ingin dapat mempersingkat ini menjadi sesuatu seperti:
<vim commands…><leader>i…content…<escape><vim commands…>
... sedemikian rupa sehingga menggunakan <leader>i
set :imap
nilai untuk meniru tata letak Turki tanpa mengubah tata letak keyboard sistem. Pada saat yang sama, i
akan beralih ke mode memasukkan tetapi tanpa nilai tambahan :imap
. Nilai-nilai itu sendiri mudah, saya hanya perlu pemetaan alfabet seperti ini:
:imap a u
:imap A U
:imap o i
:imap O İ
"etc.
Pertanyaannya adalah, bagaimana menyiapkan dua mode insert, salah satu modus insert normal dan satu semu insert modus yang identik kecuali untuk sekelompok pemetaan, dan bagaimana saya bisa memicu mode ini dengan <leader>i
, <leader>a
, dll?
InsertEnter
danInsertLeave
autocmds, yang dapat Anda gunakan untuk beralih tata letak secara otomatis. Khususnya, padaInsertLeave
Anda dapat memeriksa apakah itu Turki, jika ya, beralih ke Dvorak, atur bendera, dan ketika Anda memasukkan masukkan lagi beralih kembali ke Turki jika itu adalah kasus terakhir kali Anda meninggalkan mode memasukkan.:imap
adalah bahwa itu akan bekerja bahkan dalam sesi ssh jarak jauh atau ketika$DISPLAY
tidak diatur.Jawaban:
Vim memiliki sesuatu seperti ini dalam bentuk keymaps . Dari
:help mbyte-keymap
:Hanya mode insert Caps Lock yang menjelaskan pemetaan emulasi Caps Lock; seperti yang Anda lihat di sana, file pemetaan mirip dengan apa yang Anda uraikan dalam pertanyaan Anda.
Anda mengaktifkan pengaturan ini melalui
:set iminsert=1
atau via dinamisi_CTRL-^
. Hal ini juga bekerja untuk/search
dengan'imsearch'
pilihan.sumber
Jawaban Ingo Karkat sepertinya itu solusi yang tepat dan telah menyelesaikan situasi saya. Namun di sini ada sedikit lebih banyak instruksi lisan untuk orang lain yang baru saja memulai dengan fungsi peta bahasa vim.
Pertama, Anda memerlukan file peta bahasa. Seperti pada contoh Caps Lock, Anda ingin memasukkan sesuatu seperti yang berikut ini
~/.vim/keymap/dvorak2turkishf.vim
(unduh pemetaan lengkap saya dari Githu b):Dengan itu, tetap ada pengaturan binding untuk mengaktifkannya dalam beberapa kasus tetapi tidak pada yang lain. Anda ingin menambahkan sesuatu ke
~/.vimrc
file Anda .Pertama, ikat keymap pencarian ke input:
Kemudian atur keymap mana yang akan digunakan untuk mode input bahasa alternatif:
Matikan mode input alternatif sehingga secara default tidak akan ada perubahan:
Siapkan perintah-otomatis untuk dijalankan setiap kali meninggalkan mode sisipan untuk mematikan sakelar bahasa alternatif:
Tambahkan binding untuk semua berbagai cara Anda mungkin berakhir dalam mode input bahasa alternatif sehingga menggunakan
<leader>
(Biasanya\
) sebelum mereka mengatur peta bahasa swtich untuk diaktifkan sebelum beralih:Tetapkan warna kursor berbeda untuk saat peta diaktifkan:
Secara keseluruhan, inilah yang diubah dalam konfigurasi saya . Sebagai catatan akhir, saat Anda berada dalam mode penyisipan, Anda dapat mengaktifkan dan menonaktifkan opsi peta bahasa menggunakan
<ctrl>+^
.sumber