Saya memiliki keinginan yang serupa dengan keinginan Anda. Saya menyelesaikannya dengan menggunakan pengikat-kunci pengubah tingkat sistem.
(Tentu saja, ini berantakan; tapi saya merasa layak untuk mempertahankan hibrida kontrol OS-terlatih MacVim saya (simpan, baru, salin, tempel) dalam baris perintah vim
s.)
Begini cara saya melakukannya:
- Memasang Karabiner , yang mana sangat , program yang sangat kuat (dan bagian penting dari instalasi OS X setiap poweruser / programmer, IMHO)
Memungkinkan “Command_L to Control_L (hanya di Terminal)” :
Peta ⌃ Kontrol -prefixed cocok dengan perintah MacVim mana pun yang paling sering Anda gunakan di baris perintah vim
. Misalnya, untuk mendukung ⌘S ,
noremap <silent> <C-S> :update<CR>
vnoremap <silent> <C-S> <C-C>:update<CR>
inoremap <silent> <C-S> <C-O>:update<CR>
Kembalikan yang diharapkan ⌘ -Alamat untuk Terminal.app sendiri, dengan casing khusus di System Preferences. Misalnya, jika Anda mau ⌘N untuk tetap mengontrol tab Terminal, alih-alih memetakannya ke vim
file, coba:
Sekarang, apapun kamu jangan tambahkan dalam daftar ini, akan melewati kata demi kata ke baris perintah vim
(dan, tentu saja, program baris perintah apa pun yang Anda gunakan.)
Peringatan
Pendekatan ini ada beberapa lebih lanjut kerugian halus, yang ingin saya sorot bagi siapa pun yang mempertimbangkan untuk mengambilnya (seperti yang saya lakukan):
- ⌘␣ tidak akan lagi memetakan ke Spotlight seluruh sistem. (Saya punya masalah terbuka pada Karabiner, dan akan kembali ke sini setelah saya memiliki solusi sementara.)
- Untuk alasan saya tidak dapat memastikan, bahkan dengan ⌃W pengecualian yang diatur dalam System Preferences, perilaku penutupan terminal Terminal.app berubah dengan pengaturan ini: ⌘W akan menutup masing-masing tab di jendela; tetapi jika tab saat ini adalah terakhir tab, itu akan tidak menutup jendela. Sebaliknya, itu tidak berpengaruh. Saya harus melatih diri untuk menggunakannya ⇧⌘W untuk menutup jendela jika hanya ada satu tab yang tersisa.
- Jika Anda sudah melatih diri untuk menggunakannya ⌃V di MacVim untuk melakukan pemilihan blok-bijaksana, maka Anda harus melatih diri sendiri untuk menggunakan alternatifnya , ⌃Q (atau sekarang, ⌘Q ). Selain itu, Anda harus menambahkan
stty -ixon
di skrip startup shell Anda, sebagai ⌃Q dikonsumsi secara default untuk melakukan fungsi kontrol shell kuno (yang tanpa penggunaan modern).
Alternatif ⌘W tingkah laku
Selain hal di atas, saya memutuskan untuk menimpanya lebih jauh ⌘W sebagai kunci universal ‘tutup ini’, berlaku untuk beberapa aplikasi.
Alih-alih pemetaan ⌘W ke ‘Tutup Tab,’ seperti di atas; Saya pribadi memetakannya untuk ⇧⌘W (untuk mempertahankan semantik "segera tutup tab ini".) Kemudian, dalam program apa pun, saya memetakan ⌃W untuk semacam fungsi tutup-simpan-keluar.
Misalnya, di .vimrc
:
noremap <C-W> :confirm quit<CR>
vnoremap <C-W> <C-C>:confirm quit<CR>
inoremap <C-W> <C-O>:confirm quit<CR>
… Atau saya .zshrc
:
function close_tab { exit }
zle -N close_tab_widget close_tab
bindkey '' close_tab_widget
bindkey -M vicmd '' close_tab_widget
Dengan dua potongan itu di tempatnya, dan Terminal Anda dikonfigurasi untuk to Tutup jika shell keluar dengan bersih, 'serangkaian ⌘W s pertama-tama akan keluar dari vim, dan kemudian menutup shell seluruhnya.
Selain itu, sekarang fungsionalitas tambahan saat keluar dari program dapat dipertahankan: misalnya, vim
akan bertanya sebelum berhenti jika file tidak disimpan (seperti MacVim); dan zsh
akan bertanya sebelum berhenti jika ada pekerjaan latar belakang.
Nota bene: Tidak langsung terkait dengan pertanyaan Anda; tetapi Anda juga harus memeriksa Mode Mode Vim Ubiquitous ’di Karabiner. Ini “sedikit banyak” bagi saya untuk digunakan setiap hari, tetapi itu adalah ide yang sangat keren, dan secara mengejutkan diterapkan dengan baik.
private.xml
untuk mengecualikan ⌘␣: github.com/tekezo/Files/blob/master/Karabiner/…tidak yakin apakah ini berlaku, tetapi
stty
menggunakan ctrl-s untuk menghentikan terminal sampai dimulai kembali dengan ctrl-q. Saya akan sedikit curiga tentang mengirim ctrl-s ke terminal.sumber