Apakah Anda menggunakan vim di terminal, atau versi gui (gvim, macvim)?
Nick Knowlson
Perhatikan juga bahwa jika encodingperubahan Anda setelah pemetaan berjalan, apa yang Anda dapatkan dari tombol Alt mungkin tidak cocok dengan apa yang Anda tetapkan pada awalnya.
dash-tom-bang
Jawaban:
136
Untuk pengguna Mac di luar sana: untuk memetakan ALT + hjkl, gunakan karakter asli yang dihasilkan (cari tahu karakter mana yang menggunakan kombinasi saat dalam mode INSERT), misalnya dengan keyboard saya, saya mendapatkan:
<ALT+j> ==> ª
<ALT+k> ==> º
dan seterusnya. Solusi ditemukan di sini di StackOverflow.
Saya menggunakan ini untuk memindahkan baris ke atas dan ke bawah dengan ALT + k \ j, menggunakan ini di .vimrc saya:
LAMPIRAN OLEH Dylan_Larkin (2019): Untuk ini bekerja pada Mac, " Gunakan Option sebagai Meta Key " harus diaktifkan OFF di Terminal-> Preferences> Keyboard
Inilah tujuan saya datang ke sini (Alt + HJKL untuk memindahkan perpecahan)! Terima kasih!
Jamie Schembri
6
Cara mudah untuk mengetahui karakter apa itu, adalah dengan menggunakan cat. Cukup ketik catdan di dalam jendela kucing kombinasi tombol yang Anda inginkan. Menemukan bahwa alt + brackets adalah 'dan “di mac saya.
dvcrn
4
ini berfungsi dengan baik karena Alt + HJKL untuk bergerak di antara perpecahan, jari-jari saya menyukainya !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales
3
Pemetaan yang tepat ini mungkin tidak berfungsi seperti yang diharapkan di versi OSX mendatang. Gunakan sed -n luntuk melihat output <Ak> dan <Aj> sebelum Anda mengonfigurasi pemetaan. Dalam kasus saya <Aj> adalah ∆dan <Ak> adalah˚
luk3thomas
4
Di macOS, saat mengatur Use Option as Meta Keyatau di profil iTerm ⌥ key to Esc+akan berperilaku seperti cara tradisional (seperti di Linux / Unix). Jadi Anda tidak perlu menyetel ke Vim peta <^[j>, cukup petakan ke <A+j>atau <M+j>dan itu berfungsi.
goetzc
40
:help key-notationmenjelaskan format apa yang perlu digunakan untuk memetakan kunci yang berbeda. Dalam kasus alt, Anda dapat menggunakan salah satu <A-atau <M-. Jadi pemetaan Anda akan menjadi
map <M-d> <C-d>
Saya juga merekomendasikan menggunakan norevarian :map(misalnya, noremap) kecuali Anda secara eksplisit ingin mengizinkan sisi kanan dievaluasi ulang untuk pemetaan.
Ini masih belum berpengaruh. Input Alt + D masih memasukkan beberapa karakter aneh ke Vim.
Thomson
9
Itu masalah terpisah. Terminal Anda mengirimkan karakter multi-byte ke Vim dan Vim tidak tahu untuk menafsirkannya sebagai <A-d>. Anda mungkin perlu mengubah pengaturan terminal Anda agar mengirim <A-d>sebagai <Esc>d.
jamessan
1
@jamessan bagaimana melakukannya di iterm2?
Finn
33
Saya tidak yakin apakah "mungkin" lagi. Silakan baca pembaruan di bawah ini.
Ya, Anda bahkan bisa di terminal vim, tetapi tidak ada jawaban nyata yang mencakup semua . Pada dasarnya Anda harus mengikuti dua langkah:
Pastikan <M-d>notasi ada, dan petakan dengan tepat apa yang diinput terminal Anda ( ^[adalah karakter escape):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
Petakan sesuatu ke kombinasi yang baru Anda "buat":
noremap <M-d> :echo "m-d works!"<cr>
Memahami cara kerjanya, Anda dapat memperluas "trik" ini ke kombinasi "aneh" lainnya, misalnya, saya menggunakan rayap, dan vim tidak mengenali <S-F1>, menggunakan cat I get ^[[1;2P. Kemudian, di vimrc saya, saya lakukan:, execute "set <S-F1>=\e[1;2P"dan kemudian saya bisa memetakannya ke apa saja.
Catatan: Saya tidak tahu mengapa, tetapi untuk beberapa orang menggunakan \<Esc>karya, bukan \e.
Pembaruan (Februari 2016)
Bergantung pada istilah agar terminal Anda berjalan, mungkin Anda bisa ... di sebagian besar terminal, "alt + h", misalnya, dipetakan ke ^[h, yaitu: "escape + h". Sehingga bisa menimpa kunci. Saya baru saja mencoba (lagi) dan tampaknya berhasil, tetapi saya yakin ini adalah implementasi yang sangat buggy dan rawan kesalahan.
Namun demikian, untuk yang cukup berani, inilah plugin eksperimental:
Alih-alih execute "set...barang, Anda bisa langsung menggunakan set <M-d>=^[d. Ini ^[sebenarnya adalah karakter pelarian yang dimasukkan C-v-Esc. Ini diperlukan di rxvt / urxvt, tetapi xterm seharusnya tidak memerlukan perlakuan khusus. Info lebih lanjut tentang topik ini di vim wiki .
Micah Elliott
Apakah ada pendekatan analog untuk hal ini yang akan bekerja dengan tmux sehingga Md dapat diikat?
George
2
Bagi saya, <Esc>maka dsekarang melakukan hal yang sama seperti <Alt>+ d. Juga, Anda bisa melakukan ini dalam satu baris dengan Ctrl-v, <Esc>seperti di sini .
Sparhawk
24
Map Alt Key di Vim di Mac OSx:
Mulailah dengan melihat kode kunci yang dikirim terminal Anda ke vim:
$ sed -n l
^[[1;9D
Dalam contoh di atas, saya menjalankan perintah dan menekan Alt + Left.
Ini ^[[1;9Dadalah urutan yang lolos dikirim ke vim, sehingga kita dapat menggunakannya untuk pemetaan kita.
Jika Anda menggunakan aplikasi iTerm2, ada baiknya untuk memeriksa bagaimana kunci dipetakan di Profil> Kunci.
fikovnik
1
Dengan Optiontombol kiri ( ⌥) dikonfigurasi seperti Esc+di iTerm2, saya dapat memetakan alt+quntuk keluar dari vim: nnoremap <silent> <Esc>q :qa!<cr>
ryenus
Anda juga dapat mengatur iTerm2 untuk bekerja dengan peta ulang itu jika Anda pergi ke Preferensi> Profil, pilih profil Anda saat ini, buka tab "tombol" untuk profil itu dan ubah opsi yang mengatakan "Kiri ⌥ Kunci" menjadi "Esc +" (tersedia pilihannya adalah "Normal", "Meta", dan "Esc +").
Sepertinya ini masih tidak berhasil. Alt + d akan memasukkan karakter aneh ke Vim, yang sama dengan kasus unmap.
Thomson
Berfungsi untuk saya (saya menggunakan gvimdi Windows)
Deqing
8
Terminal Anda mungkin tidak mengirimkan Alt-D "dengan benar". Anda dapat menggunakan CV untuk benar-benar mendapatkan escape sequence yang sebenarnya dikirim ke Vim dan menggunakannya untuk membuat pemetaan Anda. Yaitu, edit .vimrc Anda dan ganti yang sebenarnya dengan mengetikkan urutan berikut "CV Alt-D" sehingga Anda akan memiliki urutan escape yang benar di vimrc Anda. Itu tidak akan berfungsi jika terminal Anda tidak mengirim apa pun ke vim.
Terminal saya akan menghasilkan ^[xperintah (misalnya untuk alt-x). Apa yang membuatnya bekerja di dalam Vim adalah skrip kecil dari vim.wikia.com ini :
for i in range(97,122)
let c = nr2char(i)
exec "map \e".c." <M-".c.">"
exec "map! \e".c." <M-".c.">"
endfor
Tambahkan ke .vimrc untuk memperbaiki semua pemetaan kunci alt.
Saya juga harus mengubah konfigurasi menjadi nnoremap <Esc>j :m .+1<CR>==dan serupa ...
mihaipopescu
0
Halo, setelah tidak ada solusi yang baik setelah bertahun-tahun menguji semua hal di atas di mac, saya terus mencari.
Inilah solusi saya:
Untuk membuat kombinasi tombol termasuk Alt Anda harus mendeklarasikan kombinasi di preferensi> keyboard dan menggunakan kombinasi itu di file setup vim (centang opsi gunakan sebagai tombol meta).
Keluarannya harus berupa karakter yang tidak biasa (tidak amisalnya) sehingga Anda tidak menimpa karakter biasa.
Dalam contoh di bawah ini, Anda harus bisa cukup vim dengan ALT-Up.
encoding
perubahan Anda setelah pemetaan berjalan, apa yang Anda dapatkan dari tombol Alt mungkin tidak cocok dengan apa yang Anda tetapkan pada awalnya.Jawaban:
Untuk pengguna Mac di luar sana: untuk memetakan ALT + hjkl, gunakan karakter asli yang dihasilkan (cari tahu karakter mana yang menggunakan kombinasi saat dalam mode INSERT), misalnya dengan keyboard saya, saya mendapatkan:
dan seterusnya. Solusi ditemukan di sini di StackOverflow.
Saya menggunakan ini untuk memindahkan baris ke atas dan ke bawah dengan ALT + k \ j, menggunakan ini di .vimrc saya:
seperti yang dijelaskan di sini .
Semoga bermanfaat, selamat menikmati Vim :)
LAMPIRAN OLEH Dylan_Larkin (2019): Untuk ini bekerja pada Mac, " Gunakan Option sebagai Meta Key " harus diaktifkan OFF di Terminal-> Preferences> Keyboard
sumber
cat
. Cukup ketikcat
dan di dalam jendela kucing kombinasi tombol yang Anda inginkan. Menemukan bahwa alt + brackets adalah 'dan “di mac saya.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
untuk melihat output <Ak> dan <Aj> sebelum Anda mengonfigurasi pemetaan. Dalam kasus saya <Aj> adalah∆
dan <Ak> adalah˚
Use Option as Meta Key
atau di profil iTerm⌥ key to Esc+
akan berperilaku seperti cara tradisional (seperti di Linux / Unix). Jadi Anda tidak perlu menyetel ke Vim peta<^[j>
, cukup petakan ke<A+j>
atau<M+j>
dan itu berfungsi.:help key-notation
menjelaskan format apa yang perlu digunakan untuk memetakan kunci yang berbeda. Dalam kasus alt, Anda dapat menggunakan salah satu<A-
atau<M-
. Jadi pemetaan Anda akan menjadiSaya juga merekomendasikan menggunakan
nore
varian:map
(misalnya,noremap
) kecuali Anda secara eksplisit ingin mengizinkan sisi kanan dievaluasi ulang untuk pemetaan.sumber
<A-d>
. Anda mungkin perlu mengubah pengaturan terminal Anda agar mengirim<A-d>
sebagai<Esc>d
.Saya tidak yakin apakah "mungkin" lagi. Silakan baca pembaruan di bawah ini.
Ya, Anda bahkan bisa di terminal vim, tetapi tidak ada jawaban nyata yang mencakup semua . Pada dasarnya Anda harus mengikuti dua langkah:
Pastikan
<M-d>
notasi ada, dan petakan dengan tepat apa yang diinput terminal Anda (^[
adalah karakter escape):Petakan sesuatu ke kombinasi yang baru Anda "buat":
Memahami cara kerjanya, Anda dapat memperluas "trik" ini ke kombinasi "aneh" lainnya, misalnya, saya menggunakan rayap, dan vim tidak mengenali
<S-F1>
, menggunakan cat I get^[[1;2P
. Kemudian, di vimrc saya, saya lakukan:,execute "set <S-F1>=\e[1;2P"
dan kemudian saya bisa memetakannya ke apa saja.Catatan: Saya tidak tahu mengapa, tetapi untuk beberapa orang menggunakan
\<Esc>
karya, bukan\e
.Pembaruan (Februari 2016)
Bergantung pada istilah agar terminal Anda berjalan, mungkin Anda bisa ... di sebagian besar terminal, "alt + h", misalnya, dipetakan ke
^[h
, yaitu: "escape + h". Sehingga bisa menimpa kunci. Saya baru saja mencoba (lagi) dan tampaknya berhasil, tetapi saya yakin ini adalah implementasi yang sangat buggy dan rawan kesalahan.Namun demikian, untuk yang cukup berani, inilah plugin eksperimental:
sumber
execute "set...
barang, Anda bisa langsung menggunakanset <M-d>=^[d
. Ini^[
sebenarnya adalah karakter pelarian yang dimasukkanC-v-Esc
. Ini diperlukan di rxvt / urxvt, tetapi xterm seharusnya tidak memerlukan perlakuan khusus. Info lebih lanjut tentang topik ini di vim wiki .<Esc>
makad
sekarang melakukan hal yang sama seperti<Alt>
+d
. Juga, Anda bisa melakukan ini dalam satu baris denganCtrl-v
,<Esc>
seperti di sini .Map Alt Key di Vim di Mac OSx:
Mulailah dengan melihat kode kunci yang dikirim terminal Anda ke vim:
Dalam contoh di atas, saya menjalankan perintah dan menekan Alt + Left.
Ini
^[[1;9D
adalah urutan yang lolos dikirim ke vim, sehingga kita dapat menggunakannya untuk pemetaan kita.sumber
Option
tombol kiri (⌥
) dikonfigurasi sepertiEsc+
di iTerm2, saya dapat memetakanalt+q
untuk keluar dari vim:nnoremap <silent> <Esc>q :qa!<cr>
Menggunakan:
Lihat
:help key-notation
.sumber
gvim
di Windows)Terminal Anda mungkin tidak mengirimkan Alt-D "dengan benar". Anda dapat menggunakan CV untuk benar-benar mendapatkan escape sequence yang sebenarnya dikirim ke Vim dan menggunakannya untuk membuat pemetaan Anda. Yaitu, edit .vimrc Anda dan ganti yang sebenarnya dengan mengetikkan urutan berikut "CV Alt-D" sehingga Anda akan memiliki urutan escape yang benar di vimrc Anda. Itu tidak akan berfungsi jika terminal Anda tidak mengirim apa pun ke vim.
sumber
Terminal saya akan menghasilkan
^[x
perintah (misalnya untuk alt-x). Apa yang membuatnya bekerja di dalam Vim adalah skrip kecil dari vim.wikia.com ini :Tambahkan ke .vimrc untuk memperbaiki semua pemetaan kunci alt.
sumber
sebagai tindak lanjut jawaban Bruno untuk pengguna Mac, coba pastikan kunci opsi Anda dipetakan ke
Esc+
.Ini akan memberi Anda perilaku "normal" dari tombol option (
A
) di Vim.Misalnya, di
iterm2
, opsi ini dapat ditemukan di bawahPreferences > Profiles > Keys
:sumber
nnoremap <Esc>j :m .+1<CR>==
dan serupa ...Halo, setelah tidak ada solusi yang baik setelah bertahun-tahun menguji semua hal di atas di mac, saya terus mencari.
Inilah solusi saya:
Keluarannya harus berupa karakter yang tidak biasa (tidak
a
misalnya) sehingga Anda tidak menimpa karakter biasa.Dalam contoh di bawah ini, Anda harus bisa cukup vim dengan ALT-Up.
vim pengaturan:
pengaturan mac:
sumber