Bagaimana saya bisa memetakan ulang Caps lock menjadi Escape dan Control?

22

Saya biasanya menjalankan Linux. Saya banyak menggunakan Vim, jadi tombol Escape sangat penting. Saya juga banyak menggunakan cara pintas keyboard, jadi Kontrol adalah "kunci" juga. Di Linux, saya telah menyelesaikan ini dengan menggunakan xcape untuk memetakan tombol Caps lock ke Escape jika ditekan dengan sendirinya, atau Kontrol jika ditekan dalam kombinasi dengan tombol lain. Ini menempatkan yang terbaik dari kedua dunia dalam jangkauan cepat jari kelingking saya. Apakah ada cara saya bisa melakukan ini pada Mac?

BenjaminRH
sumber

Jawaban:

19

Ya , menggunakan Karabiner (sebelumnya KeyRemap4Macbook) .

Pertama, masuk ke panel preferensi Keyboard, klik "Tombol Pengubah ...", dan ubah Caps Lock ke Kontrol. Lalu, masuk ke Karabiner dan cari opsi ini:

Control_L ke Control_L
      (+ saat Anda mengetik Control_L saja, kirim Escape)

Periksa itu, dan Anda selesai. Dengan Karabiner Anda dapat melakukan banyak hal yang lebih menarik, seperti memetakan kunci Escape Anda (yang sekarang tidak berguna) ke kunci Hyper dengan lebih banyak ikatan kunci.

0942v8653
sumber
apakah mungkin remap esc untuk caps lock dan map caps lock untuk mengendalikan dan melarikan diri? Karena kadang-kadang, saya masih merasa perlu menggunakan caps lock untuk mengetik string huruf besar yang panjang.
Aaron Shen
Karibiner sekarang memberitahu Anda untuk mengubah Caps Lock ke "No Action" di preferensi Keyboard OSX (alih-alih mengaturnya di sana untuk Kontrol) dan menggunakan Seil, program saudara perempuan Karabiner untuk melakukan remapping. Bagian terakhir dari jawaban di atas (+ ketika Anda mengetik Control_L saja ...) masih dilakukan di Karabiner.
ScoBe
@AaronShen baru saja memetakannya kembali menjadi huruf besar ;-).
Ven
@ Jadi, saya akan merekomendasikan untuk tidak melakukan itu, Anda benar-benar tidak perlu Seil,
Ven
Saya sarankan mengurangi Karabiner Key Overlaid Modifier> Parameter batas waktu dari 1000ms ke 200ms . Jika saya memegang kunci tetapi kemudian berubah pikiran dan melepaskannya, saya tidak ingin menembakkan Escape.
joeytwiddle
16

Karabiner saat ini tidak kompatibel dengan MacOS Sierra. Solusi ramah Sierra yang lain, adalah dengan Keyboard Maestro (tidak gratis). Ubah perilaku tombol Caps-Lock ke Control through System Preferences-> Keyboard-> Modifier Keysseperti yang disarankan orang lain.

Kemudian di dalam Keyboard Maestro, atur makro seperti berikut:

  • Dipicu oleh USB Device Key Trigger
  • Tekan tombol Caps-Lock di keyboard Anda
  • diketuk sekali
  • dengan pengubah ini: ^
  • (Anda harus mengulangi pemicu sebelumnya untuk setiap keyboard USB yang Anda gunakan)
  • Kemudian tambahkan tindakan Text->Type a keystroke
  • Tekan Esc
dgn hati-hati
sumber
1
Untuk lebih jelasnya, ada sebuah proyek bernama Karabiner Elements yang berjalan di Sierra (yang merupakan pendahulu untuk versi Karabiner yang akan berjalan di Sierra). Saya belum mencobanya, jadi saya tidak tahu apakah fungsi ini tersedia atau tidak.
tubedogg
5
Karabiner-Elements belum mendukung akting pada ketukan kunci pengubah, yang diperlukan untuk ini.
hati
Opsi ini 'dengan pengubah ini: ^' hanya perlu ^ditekan bersamaan dengan capslock untuk memicu aksi. Sama sekali tidak apa yang diperlukan dalam pertanyaan.
defhlt
Karena kami pertama kali mengubah Caps-Lock untuk berperilaku seperti Kontrol melalui Preferensi Sistem, KM melihat acara USB dengan tombol Kontrol turun. Jika Anda menghilangkan ^pengubah, tindakan tidak akan pernah memicu.
hati
Jika Anda memilih rute maestro keyboard, apakah ada cara untuk memetakan tombol escape ke caps lock untuk mendapatkan kembali fungsi caps lock? Saya suka memiliki caps lock karena ctrl dan melarikan diri.
Kvass
1

Untuk melakukannya dengan Elemen Karabiner , yang mendukung macOS 10.12 dan yang lebih baru, buka ~/.config/karabiner/karabiner.json, dan tambahkan aturan berikut ke rulesarray.

{
  manipulators: [
    {
      description:
        "Change caps_lock to control when used as modifier, escape when used alone",
      from: {
        key_code: "caps_lock",
        modifiers: {
          optional: ["any"]
        }
      },
      to: [
        {
          key_code: "left_control"
        }
      ],
      to_if_alone: [
        {
          key_code: "escape",
          modifiers: {
            optional: ["any"]
          }
        }
      ],
      type: "basic"
    }
  ]
}

Anda juga dapat mencoba menggunakan ControlEscape.spoon dengan Hammerspoon .

Danny Guo
sumber
Saya tidak dapat mengaktifkan ini kecuali saya menghapus pengubah (kata kunci dan semua) di to_if_alonebagian. Tapi terima kasih atas cuplikannya. Ini sangat berguna.
Michael