Alt tuşunu Vim'de eşleyebilir miyim?


91

Aşağıdaki satırı .vimrc'ye ekleyerek eşlemeye çalıştım, ancak işe yaramıyor. .Vimrc dosyasının Vim tarafından yüklendiğini kontrol ettim.

map <Alt-D> <C-D>

bu eşlemede herhangi bir hata var mı?


Vim'i bir terminalde mi yoksa bir gui sürümünde mi (gvim, macvim) kullanıyorsunuz?
Nick Knowlson

Ayrıca encoding, eşleme çalıştıktan sonra değişiklikleriniz olursa, Alt tuşlarınızdan elde ettikleriniz başlangıçta ayarladığınızla eşleşmeyebilir.
dash-tom-bang

Yanıtlar:


138

Dışarıdaki Mac kullanıcıları için: ALT + hjkl'yi eşlemek için, bunun yerine üretilen gerçek karakteri kullanın (INSERT modundayken kombinasyonu kullanarak hangi karakteri kullandığınızı bulun), örneğin klavyemle:

<ALT+j> ==> ª
<ALT+k> ==> º

ve bunun gibi. Çözüm burada StackOverflow'da bulundu .

Bunu .vimrc'mde ALT + k \ j ile satırları yukarı ve aşağı taşımak için kullandım:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

burada açıklandığı gibi .

Umarım yararlıdır, Vim'in tadını çıkar :)

Dylan_Larkin (2019) TARAFINDAN EKLE: Bunun bir Mac'te çalışması için , Terminal-> Tercihler-> Klavye'de " Seçeneği Meta Anahtar Olarak Kullan " seçeneğinin KAPALI olması gerekir.


10
Buraya tam da bunun için geldim (Alt + HJKL bölmeleri taşımak için)! Teşekkürler!
Jamie Schembri

6
Hangi karakter olduğunu bulmanın kolay bir yolu kullanmaktır cat. catKedi penceresinin içine istediğiniz tuş kombinasyonunu yazmanız yeterlidir . Mac'imde alt + parantezlerin "ve" olduğunu öğrendim.
dvcrn

4
bu bölmeler arasında hareket etmek için Alt + HJKL olarak harika çalışıyor, parmaklarım buna bayılıyor !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales

3
Bu tam eşlemeler OSX'in gelecekteki sürümlerinde beklendiği gibi çalışmayabilir. sed -n lEşlemeyi yapılandırmadan önce <Ak> ve <Aj> çıktılarını görmek için kullanın . Benim durumumda <Aj> ve <Ak>˚
luk3thomas

4
MacOS'ta, Use Option as Meta KeyiTerm profili ayarlanırken veya üzerinde ⌥ key to Esc+geleneksel yöntem (Linux / Unix'te olduğu gibi) gibi davranacaktır. Yani haritayı Vim'de ayarlamanıza gerek yok <^[j>, sadece <A+j>veya <M+j>ile eşleştirin ve çalışır.
goetzc

40

:help key-notationfarklı anahtarları eşlemek için hangi formatın kullanılması gerektiğini açıklar. Alt durumunda, ya <A-da kullanabilirsiniz <M-. Yani haritanız

map <M-d> <C-d>

noreEşleştirmeler için sağ tarafın yeniden değerlendirilmesine açıkça izin vermek istemediğiniz sürece :map(örneğin noremap) değişkenini kullanmanızı da öneririm .


2
Bunun hala bir etkisi yok. Alt + D girişi hala Vim'e bazı garip karakterler giriyor.
Thomson

9
Bu ayrı bir konu. Terminaliniz Vim'e çok baytlı bir karakter gönderiyor ve Vim bunu olarak yorumlayacağını bilmiyor <A-d>. Muhtemelen o gönderir böylece terminalin ayarlarını değiştirmek gerekir <A-d>olarak <Esc>d.
jamessan

1
@jamessan iterm2'de nasıl yapılır?
Finn

33

Artık "mümkün" olduğundan emin değilim. Lütfen aşağıdaki güncellemeyi okuyun.

Evet, terminal vim'de bile yapabilirsiniz, ancak tüm cevabı yakalayan gerçek bir şey yoktur . Temel olarak iki adımı izlemelisiniz:

  1. <M-d>Gösterimin var olduğundan emin olun ve terminal girdilerinizin tam olarak neyi eşleştirin ( ^[kaçış karakteridir):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. Yeni "oluşturulmuş" kombinasyonunuzla bir şeyi eşleyin:

    noremap <M-d> :echo "m-d works!"<cr>
    

Nasıl çalıştığını anladığınızda, bu "numara" yı diğer "garip" kombinasyonlara genişletebilirsiniz, örneğin, termit kullanıyorum ve vim, <S-F1>aldığım kediyi kullanarak tanımıyor ^[[1;2P. Sonra, vimrc'imde yapıyorum: execute "set <S-F1>=\e[1;2P"ve sonra onu herhangi bir şeyle eşleştirebilirim.

Not: Nedenini bilmiyorum, ancak bazı insanlar için \<Esc>bunun yerine eser kullanıyor \e.


Güncelleme (Şubat 2016)

Terminalinizin çalıştığı terminfo'ya bağlı olarak, belki ... çoğu terminalde, örneğin "alt + h" ile eşlenir ^[h, yani: "escape + h". Böylece anahtarların üzerine yazabilir. Sadece denedim (tekrar) ve işe yarıyor gibi görünüyor, ancak bunun çok hatalı ve hataya açık bir uygulama olduğuna inanıyorum.

Yine de, yeterince cesur olanlar için, işte deneysel bir eklenti:


Malzemeler yerine execute "set...doğrudan kullanabilirsiniz set <M-d>=^[d. ^[Aslında ile girilen bir kaçış karakteridir C-v-Esc. Bu rxvt / urxvt'de gerekliydi, ancak xterm'in özel muameleye ihtiyacı olmamalı. Bu konu hakkında daha fazla bilgiyi vim wiki'de bulabilirsiniz .
Micah Elliott

Buna, tmux ile çalışacak, yani Md'ye bağlanabilecek benzer bir yaklaşım var mı?
George

2
Benim için, <Esc>o zaman dşimdi aynı şeyi yapar <Alt>+ d. Ayrıca, sadece tek satıra yapabilirsiniz Ctrl-v, <Esc>başına burada .
Sparhawk

24

Mac OSx'te Vim'de Alt Anahtarını Eşle:

Terminalinizin vim'e gönderdiği anahtar kodunu görüntüleyerek başlayın:

$ sed -n l
^[[1;9D 

Yukarıdaki örnekte komutu çalıştırdım ve düğmesine bastım Alt + Left.

^[[1;9DBöylece biz, kullanıcı vim gönderilen kaçan dizisidir bizim haritalama.

map <Esc>[1;9D 

3
İTerm2 uygulamasını kullanıyorsanız, Profil> Tuşlar'da tuşların nasıl eşlendiğini kontrol etmek iyidir.
fikovnik

1
İTerm2'deki gibi yapılandırılan sol Optiontuş ( ) Esc+ile vim'den alt+qçıkmak için nnoremap <silent> <Esc>q :qa!<cr>
eşleyebilirim

Ayrıca iTerm2'yi, Tercihler> Profiller'e gidip mevcut profilinizi seçip bu profil için "tuşlar" sekmesine gidip "Sol ⌥ Tuş" yazan seçeneği "Esc +" (kullanılabilir seçenekler "Normal", "Meta" ve "Esc +" şeklindedir).
Giovanni Benussi

12

Kullanım:

map <A-D> <C-D>

Bakın :help key-notation.


1
Görünüşe göre bu hala çalışmıyor. Alt + d, Vim'e unmap durumuyla aynı olan garip bir karakter girecektir.
Thomson

Benim için çalışıyor ( gvimWindows'ta kullanıyorum )
Deqing

8

Terminaliniz Alt-D'yi "düzgün" iletemeyebilir. CV'yi Vim'e gönderilen gerçek kaçış sırasını almak için kullanabilir ve eşlemenizi oluşturmak için kullanabilirsiniz. Yani, .vimrc dosyanızı düzenleyin ve aşağıdaki sırayı "CV Alt-D" yazarak gerçek olanı değiştirin, böylece vimrc'nizde doğru kaçış sırasına sahip olursunuz. Terminaliniz vim'e hiçbir şey göndermezse bu işe yaramaz.


8

Terminalim ^[xkomutlar üretir (örneğin, alt-x için). Vim'de çalışmasını sağlayan şey, vim.wikia.com'daki şu küçük komut dosyasıydı :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Tüm alt anahtar eşlemelerini düzeltmek için .vimrc'ye ekleyin.


1

Bruno'nun Mac kullanıcıları için verdiği cevabın devamı olarak, seçenek anahtarınızın eşlendiğinden emin olun Esc+.

Bu size AVim'deki option ( ) tuşunun "normal" davranışını verecektir .

Örneğin, içinde iterm2bu seçenek şu şekilde bulunabilir Preferences > Profiles > Keys:

iterm2 tercihleri ​​ekran görüntüsü


Ayrıca yapılandırmayı nnoremap <Esc>j :m .+1<CR>==ve benzerini değiştirmek zorunda kaldım ...
mihaipopescu

0

Merhaba, yıllarca Mac'te yukarıdakileri test ettikten sonra iyi bir çözüm bulamadım, aramaya devam ettim.

İşte benim çözümüm:

Alt içeren bir kombinasyon tuş vuruşu oluşturmak için, kombinasyonu tercih> klavyede bildirmeniz ve bu kombinasyonu vim kurulum dosyasında kullanmanız gerekir (meta anahtar olarak kullanım seçeneğini işaretleyin).

aNormal bir karakteri geçersiz kılmamak için çıktı alışılmadık bir karakter olmalıdır ( örneğin hayır ).

Aşağıdaki örnekte, ALT-Up ile oldukça vim yapabilmelisiniz.

vim ayarı: vim ayarı

mac ayarı: mac ayarı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.