GVim'in sanal düzenlemesiyle daha iyi fare tıklatma davranışı


1

Vim'in virtüaledit = tüm özelliklerini kullanmayı seviyorum, ancak bir satırın sonundan sonra tıklayabilmeyi ve imlecin doğrudan satırın sonuna gitmesini de seviyorum (üzerine tıkladığım konuma gitmek yerine). Vim'in imlecin yerleşmesini fare tıklamasını takiben daha akıllıca yapmasını sağlayacak bir eklenti veya bir şey var mı? İdeal olarak, aşağıdakilerden birini yapmasını isterim:

  • Fare tıklamasıyla virtüaledit tercihini yoksay Fare tıklatmasında, tıklama satırdaki son karakterden sonra gerçekleşirse, Vim, virtüaledit'in açık olmasına bakılmaksızın imleci satırın sonuna getirir.
  • Moda bağlı fare tıklaması davranışı: Normal modda, satır sonundan sonra fare tıklaması imlecin son karaktere atlamasına neden olur; ekleme modunda, imleç farenin altına yerleştirilir.
  • MS-Word stili davranış (tercih edilen): İmleç, tek tıklamayla satırın sonuna veya çift tıklamayla virtüaledit konumuna atlar

Sadece virtualedit-all'dan virtualedit-block'a geçebileceğimi biliyorum, ancak fare tıklaması davranışı dışındaki her şey için virtualedit = all'ı tercih ediyorum. (Aslında, imleci bir fare tıklaması kullanarak sekme karakterinin ortasına yerleştirmeyi bile seviyorum, bu yüzden satırdaki son karakterden sonra tıklamak gerçekten de bir davranış.)

Not; Lütfen, fareyi kullanmamayı öğrettiğimi öneren hiçbir yorum veya cevap yok. Fare kullanımı, Vim'den gVim'e geçmemin nedenlerinden biri, çünkü bir dosyadaki birincil hareket yönteminiz sadece klavye olsa bile, açıkçası son derece kullanışlı.

EDIT: moda bağlı fikir eklendi.

Yanıtlar:


1

Fare tıklamaları tıpkı Vim'deki tuşlara basıldığında olduğu gibi haritalanabilir. Böylece virtüaledit'i istediğiniz gibi ayarlamak için bir fare tıklatmasını yeniden düzenleyebilir, ardından fare tıklatmasını ve ardından geri ayarlamayı yapabilirsiniz.

Ekleme modu şu anda denemekten daha karmaşık, ancak normal mod kolay. Bunun gibi bir şey işe yaramalıydı, ancak virtüaledit'i kurtarmak ve geri yüklemek daha açık olsa da açıkça belirtmeli:

nnoremap <silent> <LeftMouse> :set virtualedit=<CR><LeftMouse>:set virtualedit=all<CR>

Kullanarak, aynı şekilde bir çift tıklama remap da mümkündür <2-LeftMouse> yerine <LeftMouse>. Bazı deneyler gerekmeyebileceğini gösterdi. Ancak, varsayılan olarak çift tıklamak sizi görsel seçim moduna soktuğundan, bir eşleme gibi isteyebilirsiniz:

nnoremap <silent> <2-LeftMouse> <LeftMouse>

Ancak, aslında bu işe alamadım. Görsel moddan uzak durmanın nasıl olduğunu çözemedim, hatta o haritalama ve birkaç benzer uygulamayla bile.


EDIT (OP tarafından; başkalarına görebilmeleri için "son" çözümümü buraya göndermek istiyorum, ancak ayrı bir cevap göndermek istemiyorum, çünkü bu cevap gerçekten ihtiyacım olanıydı):

İşte benim içine koyarak sona erdi .vimrc:

function! TempNonVirtual()
    let g:oldvirtualedit=&virtualedit
    set virtualedit=
endfunction
function! RestoreVirtual()
    let &virtualedit=g:oldvirtualedit
endfunction
set virtualedit=all
nnoremap <silent> <LeftMouse> :call TempNonVirtual()<CR><LeftMouse>:call RestoreVirtual()<CR> 

Bu iki işlevi tek bir işlevde birleştirmek istiyorum NonVirtualClick veya eski virtualedit ayarını kaydedecek bir şey, tıklamayı yapın ve ardından ayarı geri yükleyin, ancak <LeftMouse> bir komut değildir, bu nedenle bir fonksiyonun içinde çalışmaz. (Bunun nasıl aşılacağına dair ipuçları memnuniyetle karşılanacaktır ...)


Ayrıca, benim için işe yarayan aşağıdaki haritalamayı da ekledim: nnoremap <silent> <2-LeftMouse> <LeftMouse>i. Nedense "ekleme moduna girmek için çift tıklayın" sadece bana mantıklı geliyor. İdeal olarak, sadece imleç çizginin sonunu geçiyorsa ve standart davranışı devam ettiriyorsa, bunun kullanılması oldukça kolay olan bir şey yapmak isterim. col('$') ve getpos, ama şimdilik olduğu gibi bırakacağım. Tekrar teşekkürler!
Kyle Strand

Aslında, bu haritalama tutarsız görünüyor. Bazen beni VISUAL INSERT moduna geçirir, bazen beni VISUAL moduna geçirir ve çizginin büyük bir bölümünü vurgular ...
Kyle Strand
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.