Saya kadang-kadang perlu menulis kata-kata Yunani, tetapi ketika saya menggunakan keyboard Yunani, memukul, mengatakan, <C-p>
akan dipahami sebagai <C-π>
dan bukan sebagai perintah yang saya maksudkan. Ini bisa diperbaiki dengan :map <C-p> <C-π>
. Bisakah saya melakukan ini untuk semua surat tanpa membuat daftar semua?
PS. Membuat daftar semua tidak menghasilkan hasil yang sempurna. Misalnya, q
ada ;
di Gr. keyboard, tetapi kami tidak ingin memetakan; untuk q. Juga, untuk beberapa alasan, ΖΖ (zeta zeta) tidak berfungsi setelahnya :map Ζ Z
. Dan perintah yang saya definisikan,, \lw
tidak berfungsi sebagai \λς
.
key-bindings
keyboard-layout
Toothrot
sumber
sumber
langmap
opsi (lihat dokumen yang menyertakan contoh tata letak yunani). Opsi ini sebenarnya dibuat untuk membantu berurusan dengan keyboard non latin seperti yunani atau cyril. Ini memungkinkan Anda untuk menentukan pasangan simbol yang akan ditafsirkan secara normal dalam mode insert tetapi akan diganti dalam mode lain, mungkin ini akan membantu Anda.:echo has('langmap')
jika Anda1
memilikinya, jika Anda mendapatkannya,0
Anda tidak memilikinya.brew install vim --override-system-vi
dan:echo has &c
sekarang mengembalikan 1. ZZ berfungsi. Masalah dengan\lv
& c tetap ada.:echo has &c
bagian itu, saya tidak melihat bagaimana hal itu terkaitlangmap
juga begitu Anda telah vim dikompilasi denganlangmap
Anda harus menentukan pemetaan dengan:set langmap=ΑA,ΒB,ΨC [...]
di vimrc Anda.Jawaban:
Saya akan merekomendasikan
keymap
, yang dapat memecahkan masalah Anda. Letakkan ini di vimrc Andauntuk menonaktifkan bahasa Yunani sebagai default. Anda dapat mengaktifkan opsi pada (Bahasa Yunani) dan mematikan (Bahasa Inggris) menggunakan
<ctrl>+^
(Anda juga dapat menggunakan<ctrl>+6
, itu dipetakan pada tombol, bukan pada simbol) dalam mode insert dan Ganti mode (tidak bekerja di Mode normal). Untuk menonaktifkan secara otomatis ketika meninggalkan mode penyisipan, Anda dapat menggunakanLebih lanjut tentang ini
:h iminsert
:h keymap
:h imsearch
:h i_CTRL-^
Sunting ke komentar kedua:
Anda dapat mencoba ini untuk mengaktifkan bahasa Yunani secara otomatis, jika memasuki mode penyisipan (dan mengganti mode), dan untuk mematikan secara otomatis, jika meninggalkan (maka Anda tidak perlu pemetaan yang disebutkan sebelumnya).
sumber
:map >a
, dan jika ada , hapus peta dengan:unmap >a
. Sebagai pengguna non-Yunani dan non-MacO, saya sudah kehabisan akal. Maaf dan semoga berhasil!Seperti yang saya katakan di komentar, pemetaan di tidak dirancang untuk melakukan apa yang ingin Anda lakukan. Opsi yang menarik untuk use case ini adalah
langmap
.Opsi ini memungkinkan untuk menjaga perilaku atau keyboard Anda dalam mode sisipkan dan mengubah perilaku di mode lain.
Untuk menggunakannya, Vim harus dikompilasi
+langmap
, Anda dapat memeriksa apakah opsi ini diaktifkanecho has('langmap')
: jika perintah mengembalikan1
opsi diaktifkan, Anda harus menyiapkan pengaturan dengan opsi ini (untuk mengetahui bagaimana melakukannya, itu adalah pertanyaan lain).Ketika diaktifkan, opsi mengambil pasangan karakter misalnya
set langmap += à@
akan memungkinkan Anda untuk menambahkanà
di buffer Anda ketika Anda berada dalam mode insert dan Anda mengetik aà
tetapi mengetikà
dalam mode normal benar-benar akan memicu a@
(contoh ini dapat berguna pada azerty keyboard untuk mempermudah pekerjaan dengan makro).Untuk menggunakan langmap di yunani Anda dapat mengikuti contoh yang diberikan dalam
:h 'langmap'
menambahkan baris ini ke Andavimrc
(Menyalin baris ini dari sini mungkin bukan ide yang baik karena saya benar - benar tidak yakin dengan pengkodean, mungkin menarik garis langsung dari file bantuan mungkin lebih aman) :Sekarang dari apa yang saya mengerti dalam komentar Anda itu tetap menjadi masalah ketika Anda mencoba menggunakan perintah yang telah ditentukan: ketika Anda mengetik perintah, perilaku mode penyisipan akan dipicu alih-alih perilaku langmap yang ditentukan. Sayangnya saya tidak yakin saya punya solusi yang bagus untuk itu. Satu ide bisa jadi untuk mendefinisikan kembali perintah misalnya seperti itu:
Dengan cara ini ketika Anda akan mengetik perintah
λς
Vim akan mengeksekusilw
tetapi saya melihat beberapa kelemahan untuk metode ini:Jadi mungkin sebuah plugin yang disarankan oleh @Alexander Myshov dalam jawabannya untuk pertanyaan ini bisa berguna (karena saya tidak pernah mencoba semua ini, saya tidak tahu apakah mereka menyelesaikan masalah tetapi sepertinya mereka melakukannya).
sumber
Saya mengetik secara teratur dalam bahasa Inggris dan Swedia. Bahasa Swedia adalah masalah yang lebih kecil untuk diselesaikan daripada bahasa Yunani karena hanya memperluas alfabet bahasa Inggris dengan beberapa karakter, tetapi saya pikir solusi saya dapat ditransfer ke bahasa Yunani.
Saya biasa beralih menggunakan switch keyboard sistem OS saya. Masalahnya adalah, seperti yang dicatat OP, bahwa itu memecah sejumlah besar perintah, karena dalam mode normal, setiap tombol mengirimkan sinyal lain ke Vim dengan keyboard non-Inggris. Dalam layout keyboard Swedia, apalagi, sejumlah besar karakter non-abjad dipindahkan untuk membuat jalan bagi karakter baru
å
,ä
danö
. Misalnya,}
diketik dengan Alt-Shift-9 (cocok dengan tanda kurung buka pada keyboard Inggris), dan backslash diketik dengan Alt-Shift-7. Beralih ke tata letak keyboard vanilla Swedia untuk memasukkanmode sehingga menyebabkan sejumlah besar sakit kepala.Solusi saya adalah untuk memetakan kembali kunci yang relevan hanya di insertmode dan membungkus pemetaan ini dalam suatu fungsi sehingga saya dapat beralih dengan mudah bolak-balik. Kode di bawah ini adalah bagaimana saya melakukan ini di blog saya
.vimrc
. Ini hanya menambahkan karakter yang saya butuhkan ke posisi yang mereka miliki di tata letak keyboard Swedia, meninggalkan yang lainnya. Untuk mengetik karakter yang tertutup oleh mereka (;
,:
,[
,{
,"
, dan'
), saya hanya menekan tombol dua kali. Untungnya, hanya orang bodoh yang perlu mengetik duaä
s berturut-turut. (Jika pemukulan ganda ini tidak cocok, Anda dapat memetakannya ke Ctrl atau sesuatu seperti itu. Prinsip dasarnya adalah bahwa karakter yang bertopeng tetap berada di tempatnya pada keyboard tetapi satu penekanan tombol dilepas dari realisasi. Saya menemukan ini jauh lebih mudah daripada memindahkannya.) Apa artinya ketika saya ingin mengetik dalam bahasa Swedia, saya menekan<Leader>s
, yang beralih ke pemetaan ini dan menerapkan pemeriksaan ejaan Swedia. Untuk beralih kembali saya lakukan<Leader>e
.Sekarang, untuk bahasa Yunani, ini akan melibatkan pembuatan pemetaan untuk seluruh alfabet, yang sebenarnya tidak terlalu merepotkan daripada kedengarannya begitu Anda menurunkan prinsipnya. Bagian yang sulit adalah menghapus peta semua perubahan itu saat beralih ke bahasa Inggris. Mungkin seseorang dapat menemukan cara bagus untuk melakukan itu.
Saya berencana melakukan fungsi penyisipan seperti yang di bawah ini untuk bahasa Arab, bahasa lain yang sering saya ketik. Saya mungkin kembali ke sini untuk melaporkan prosesnya.
sumber
Saya mengetikkan dua bahasa juga: Rusia dan Inggris. Dan sekarang saya menggunakan plugin ini https://github.com/lyokha/vim-xkbswitch . Plugin ini memiliki ketergantungan pada switcher tata letak keyboard asli, untuk Mac OS X Anda dapat menggunakan milik saya https://github.com/myshov/xkbswitch-macosx .
sumber