Bisakah vim secara otomatis mematikan Capslock ketika kembali ke mode normal?


12

Setelah hampir setiap kali saya mengetikkan sesuatu dalam huruf besar, saya lupa mematikan capslock ketika kembali ke mode normal. Saya kemudian mencoba untuk memindahkan kursor dan akhirnya bergabung dengan banyak baris dan banyak hal lain yang saya tidak harapkan terjadi.

Apakah mungkin untuk mengkonfigurasi vim untuk mematikan capslock ketika saya menekan escape untuk masuk ke mode Normal?

Jika ada solusi yang spesifik untuk OS, saya tertarik pada yang berlaku untuk Linux.


"solusi" saya untuk ini adalah untuk memetakan kembali caps lock menjadi "no action" (macos) karena saya tidak menggunakannya kecuali karena kesalahan
localhostdotdev

Jawaban:


8

Tanggapan untuk pertanyaan ini menunjukkan bahwa itu tidak mungkin - Vim tidak memiliki akses ke OS untuk melakukan panggilan itu.

Namun, Anda dapat mencoba mengubah perilaku Anda sehingga Caps Lock tidak diperlukan. Ini adalah kunci populer untuk memetakan Ctrl, Escatau Meta.

Vim memiliki gUoperator untuk huruf besar pilihan atau gerakan, jadi mungkin Anda bisa mengetik secara normal dan menggunakannya setelah itu. Juga relevan: guuntuk huruf kecil dan ~untuk beralih.

Ada juga cara pelengkapan otomatis, yang dapat mengurangi kebutuhan Anda untuk mengetik VERY_LONG_MACRO_NAMES.


4

Saya telah memetakan ulang capslock saya menjadi ctrl dan saya jarang menggunakan capslock lagi. Namun, untuk vim jika perlu, Anda memiliki tpope / vim-capslock sebagai perangkat lunak capslock sementara untuk Anda. Jika Anda menggunakan ini, seharusnya cukup mudah untuk mengatur autocmd untuk acara tersebut InsertLeavedan menonaktifkan capslock.


3

Saya menemukan cara untuk mematikan caps lock dalam mode normal secara otomatis (meskipun hanya bekerja di Linux).

Solusi yang dibuat dengan plugin tidak memperhitungkan bahwa Anda dapat memasuki mode normal dalam lebih dari satu cara (yaitu dari menyisipkan ke normal), misalnya dari mode perintah.

Sebenarnya tidak ada acara perintah otomatis yang diaktifkan saat memasuki mode normal, jadi acara yang saya gunakan adalah CursorHoldacara, yang aktif ketika Anda tidak mengetik dalam mode normal.

au CursorHold * call TurnOffCaps()
set updatetime=10

Anda mengatur waktu pembaruan ke angka yang sangat kecil, jadi itu akan selalu aktif, sebelum Anda memiliki kesempatan untuk mengetik apa pun.

function TurnOffCaps()  
    let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
    if capsState == 'on'
        silent! execute ':!xdotool key Caps_Lock'
    endif
endfunction

Saya pikir ini adalah satu-satunya jawaban nyata untuk pertanyaan itu. Vim perlu melakukan panggilan ke OS untuk mengaktifkan CapsLock. Tentu saja cara melakukannya tergantung pada OS.
Oktaviour

2

Pilihan lain adalah untuk memetakan kembali CapsLockke Anda Esc. Ini adalah pemetaan yang telah saya gunakan selama beberapa tahun sekarang: CapsLockada di baris rumah, jadi sangat mudah digunakan jika Anda menyentuh tipe. Ini juga mempromosikan penggunaan Vim yang tepat, karena keluar dari mode penyisipan jauh lebih mudah (kunci lebih dekat daripada Esc).

Sangat mudah untuk memetakan kembali: Linux mendukung ini secara asli, ada aplikasi kecil untuk Mac OS X dan Windows untuk mencapai itu. Dan beberapa keyboard mahal bahkan dilengkapi dengan fitur yang memungkinkan pembuatan ulang kunci.


2

Selain jawaban Avian Y, sebenarnya ada autocommand yang mengaktifkan mode sisipan:

au InsertLeave * call TurnOffCaps()

Itu juga yang saya cari ...


1

Di mesin Apple saya, saya benar-benar mengimplementasikan fitur ini menggunakan Karabiner , yang bekerja dengan cukup baik. Sayangnya 10.12 melanggar Karabiner, dan saya belum mencoba menerapkannya sejak itu.

Saya memilikinya sehingga menggunakan tombol escape atau kunci enter dinonaktifkan caps lock, jika diaktifkan sebelumnya.

Jadi, ketika Anda menggunakan macOS pada 10.11 atau di bawah, Anda tentu dapat melakukan ini (meskipun jangan meminta saya untuk pengaturannya, saya tidak memilikinya lagi).

Kalau tidak, aku akan pergi dengan yang disarankan gU. (Meskipun saya dapat memahami keluhan Anda, tentang tidak dapat menggunakan metode yang sama dengan yang Anda gunakan dalam editor teks lainnya)


0

Di manual bantuan vim ada pemetaan yang cukup bagus untuk membuat kata all caps dalam mode insert:

inoremap <c-h> <esc>gUiw`]a

Ini menggunakan ctrl-h, yang biasanya hanya klon backspace, jadi Anda tidak benar-benar kehilangan apa pun dengan pemetaan ini.

Caps lock adalah mimpi buruk ketika Anda berada dalam mode normal! Saya harap itu membantu!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.