Vim'de imleci hareket ettirmeden ekran nasıl taşınır?


598

Kısa bir süre önce, imleci hareket ettirmeden tek satır adımla ekranı yukarı ve aşağı hareket ettiren Vim için Ctrl+ Eve Ctrl+ Ykısayollarını keşfettim .

İmleci bulunduğu yerde bırakan ancak imleci içeren satır ilk satır olacak şekilde ekranı hareket ettiren herhangi bir komut biliyor musunuz? (son satır için bir komut olması güzel bir bonus olacaktır).

Ctrl+ E(Veya Ctrl+ Y) tuşuna uygun sayıda manuel olarak basarak bunu başarabilirim , ancak bunu bir şekilde doğrudan yapan bir komutu olması güzel olurdu.

Herhangi bir fikir?


Bu soru Vim bölümünde olmamalı mı?
John

Yanıtlar:


877
  • zz- Ekranın ortasına güncel çizgiyi taşımak
    ( dikkat etzz sen sahip olur, Caps Lockkazayla kaydedip çıkmak olacak vim!)
  • zt - geçerli satırı ekranın üstüne taşı
  • zb - geçerli satırı ekranın altına taşı

9
@HappyGreenKidNaps ASAP'i kontrol etmek için kilit anahtarını kapatan harita!
Aaron

Caps kilidime oldukça bağlıyım, özellikle C makrolarıyla uğraşıyorum, ancak başka seçenekleriniz var. İlk olarak, eşlenmemiş bir anahtar bulun (harflerin her ikisini de kontrol edin; bir sembol veya işlev tuşu vb. Kullanarak bir değiştirici veya lider eklemeyi deneyin) ve büyük / küçük harf duyarlı 'riskli' kombinasyonuyla eşleyin. İkincisi, bir ayyıktan kurtarmak için vimundo'yu beğeninize göre yapılandırın. (Taşınabilir olmayan kesmek gelen :) Üçüncü olarak, aynısını yapın ancak kullanıcı klavye yapılandırmanızdan, örneğin Windows tuşu + Z; sekanslara haritalar için, xdotoolveya seçeneğini deneyin triggerhappy. Son olarak, büyük harf kilit durumunuzu gösterin (Vimscript'te yapılamaz.) ...
John P

2
Büyük harf kilit durumunuzu sorgulamak çevreye çok bağlıdır. Vimscript'te yapılamayacağını duydum ve bu noktada kabul ettim. Bu yolda gitmek istiyorsanız, orada xev -q, cat /proc/bus/input/devicessorgulanacak evtestveya thd ... --dump /dev/input/event<#>durumu kontrol edecek cihazı bulmak için , vb. ancak sorun bunun daha fazla olduğunu unutuyor, çünkü daha önce istediyseniz, haritaya göre kullanmaya devam edeceksiniz. Dosyalardan / kullanıcıdan / sistemden önce Vim'i kırma riski.
John P

Diğer Vim komut dosyası seçenekleri: çık / çık / vb. Onaylamak için 'onayla'yı açın .; yazmak için, BufWritePre ile bir otocommand ihtiyacınız olacağını düşünüyorum confirm(). Ayrıca, kapak kilidini ctrl ile eşlemek yerine, onu Vim tarafından anlaşılan ancak eşleştirilmemiş bir tuşa veya kombinasyona eşleyebilir ve ardından takma / değiştirme modunda yalnızca el ile veya github.com/tpope/ gibi bir şeyle kapak kilidini taklit edebilirsiniz. vim-capslock . Muhtemelen Vim dışında buna ihtiyacınız olmayacak, ancak eğer yaparsanız, değişikliklerinizi geri almak için bir xmodmap betiği yazın veya programın kendi eşlemelerini destekleyip desteklemediğini görün (ve not alın.)
John P

3
zt / zz / zb - sabit imleç ve ekranı t op / center (german: ' z entrum') / b ottom <---> H / M / L - sabit ekran ve imleci H igh / M rölanti / L ow pozisyonu
eli

626

Bunlara ek olarak:

  • Ctrl- yEkranı bir satır yukarı taşır
  • Ctrl- eEkranı bir satır aşağı taşır
  • Ctrl- uİmleci ve ekranı yukarı taşır ½ sayfa
  • Ctrl- dİmleci ve ekranı aşağı taşır ½ sayfa
  • Ctrl- bEkranı bir sayfa yukarı, imleci son satıra taşır
  • Ctrl- fEkranı bir sayfa aşağı, imleci ilk satıra taşır

Ctrl- yve Ctrl- eimleç konumunu yalnızca ekran dışına taşınacaksa değiştirin.

Http://www.lagmonster.org/docs/vi2.html izniyle


91
@ulidtko: efter (İsveççe'den sonra), yore (geçmiş anlamına gelir), yukarı, aşağı, geri, ileri. (Geri ve ileri kelimeler yukarı ve aşağıdan daha uzundur, bu yüzden doğal olarak ekranı daha uzun bir mesafeye
taşırlar

12
Sanırım dün, dün olduğu gibi daha iyi bir anımsatıcı olurdu ^^
Moberg

Hem Ctrl-u hem de Ctrl-d imleci hareket ettirir: " İmleç, dosyada aynı sayıda satır yukarı taşınır (mümkünse; satırlar sarıldığında ve dosyanın sonuna isabet ederken bir fark olabilir). "
Lex R

Teşekkürler @exr, cevabı bu ayrımı yansıtacak şekilde güncelledim.
Paul Wheeler

1
:help CTRL-EdiyorMnemonic: Extra lines.
Niko Bellic

39

Vim, imlecin her zaman geçerli ekranda olmasını gerektirir, ancak geçerli konum kaydırmasını yer imlerine ekleyebilir ve bulunduğunuz yere geri dönebilirsiniz.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

1
yalnızca yer imli çizgiye gitmeyi önemsiyorsanız, 'g
Matt Briggs

4
"Vim, imlecin her zaman geçerli ekranda olmasını gerektirir." Vim kullanıcıları, vim'de her şeyin yapılandırılabilir olmasıyla övünmeyi sever. Bu değil. Dosyada ilerlerken imlecimin hareket etmesini istemiyorum. Benim için Dealbreaker
gadelat

8
Hiç imleci göremediğiniz bir yerde olmasını istediğim bir durum yaşamadım. Elbette, imleç kaydırdığınızda hareket eder, ancak önemsiz olduğunuz yere geri dönebilirsiniz (böylece gerçekte nerede olduğunuzu görebilirsiniz, sadece bir tahmin değil). Biri için çift geri kene, diğeri Ctrl-Oiçin gerçekten harika bir tane ve "backtick, period" sizi son düzenleme yaptığınız yere geri götürür.
dash-tom-bang

3
@gedalat, kaydırdığınızda diğer editörlerde son derece sinir bozucu, imlecinizin artık nerede olduğunu bilmiyorum ve imleci geri alabilmek için bir yere tıklamak için fareyi kullanmanız gerekiyor. Ya da "burada" olduğunuzu düşünüyorsunuz, yazmaya başlıyorsunuz ve aniden imlecin bulunduğu yere geri atlıyor, bu noktada kaydırma yaptığınız yere geri dönemezsiniz, çünkü sadece imleç konumları izlenir. İmlecin gittiğiniz yeri takip etmesi muhtemelen iyi bir şeydir.
Shahbaz

1
Yapılandırılabilir, @gadelat. Sadece bu çok cevap (ile işareti konumunu harita gerekir mg, ile, etrafında git işareti kaydırma 'gve bitirdiniz Şimdi dolaşmak için yapılandırılabilir anahtarını çağırabilirsiniz ve imleç geçerli konumunu yapraklı asla gibi hissedeceksiniz Voila..!
Beco

18

İşte vimrc benim çözüm:

"keep cursor in the middle all the time :)
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

Böylece imleç ekranın ortasında kalır ve ekran yukarı veya aşağı hareket eder.


Bu çözümün OP'nin ihtiyacı olan şey olduğunu düşünüyorum. Ben uyguladım ve bir cazibe gibi çalışıyor.
Gustavo Pinsard

9
'Scrolloff'u' satırların 'değerinin yarısına ayarlamaya ne dersiniz?
rld.

maalesef "nnoremap o o <ESC> zza" otomatik uyarıyı kaybediyor, ancak geçici bir karakter ekleyip kaldırarak bu çözümün etrafında çalışıyor '. " "nnoremap o o. <ESC> zzxa"
Neil McGill

Teşekkürler @rld, 'scrolloff' da iyi veya belki daha iyi bir çözümdür. Teşekkürler! İşte referans: vim.wikia.com/wiki/…
Henry

14

Kullandığınızda aynı sütunda imleci durumda bırakmak için Ctrl+ D, Ctrl+ F, Ctrl+ B, Ctrl+ U, G, H, M, L,gg

aşağıdaki seçeneği tanımlamanız gerekir:

:set nostartofline

2
Her seferinde unutuyorum / karıştırıyorum: zt / zz / zb - sabit imleç ve ekranı t op / center (german: ' z entrum') / b ottom <---> H / M / L - sabit ekran ve taşıma imleç H igh / M rölanti / L ow konumuna
eli

8

Kimsenin Scrolloffsayfanın ortasında kalmasını sağlayan seçeneği kullanmadığına şaşırdım . Şunu deneyin:

:set so=999

Vim wiki'de önerilen ilk yöntemdir ve iyi çalışır.


3
Ve imlecin her zaman tam ortasında olmasını istemiyorsanız, daha küçük bir değere ayarlayabilirsiniz. Örneğin :set scrolloff=4, imlecin her zaman pencerenin üstünden veya altından en az 4 satır uzakta olmasını gerektirir, böylece her zaman en az biraz bağlamınız olur.
Soren Bjornstad

6

Geçmişte bu kısayolları kullandım ( not: ayrı tuş vuruşları yani z simgesine dokunun , bırakın, sonraki tuşa dokunun):

z enter -> geçerli satırı ekranın üstüne taşır

z . -> geçerli satırı ekranın ortasına taşır

z - -> geçerli satırı alta taşır

Açık değilse:

enterReturnveya Entertuşu anlamına gelir .

.DOT veya "tam durdurma" tuşu ( .) anlamına gelir .

-HYPHEN tuşu ( -) anlamına gelir

Değer için, kapak kilidi açıksa z.yanlışlıkla yazarak Vi'yı kaydetme ve kapatma tehlikesini önler ZZ.


5

İmleç taşıma komutlarına bir sayı ekleyebilir ve bu komutu birçok kez tekrarlar.

10Ctrl+ EYapacak Ctrl+ Ebir yerine 10 kez.


4

zEnter tam olarak bu sorunun ne istediğini yapar.

Garip bir zzşekilde çalışmazsa çalışır (özel .vimrc olmadan Ubuntu 2016.04 LTS'de vim 7.4.1689)



2

Bazen Kve Jtuşları ile metin kaydırmak yararlı olur , bu yüzden benim .vimrc (ayrıca bağlı zs) bu "kaydırma modu" işlevi var .

Bkz. Scroll_mode.vim .


2

kaydırma için anımsatımım ...

Diğer cevaplara da dikkat edin zeve zsanlamı: imleci sola / sağa hareket ettirin (imleci hareket ettirmeden)

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

ayrıca ekranın nerede hareket ettiğini hatırlamak için klavyedeki ve hve lve tve bve (qwertz klavyesi ile) c-eve c-y(ayrıca "y" bir şekilde alt tarafı gösterir) konumuna bakın .


1

İmleç konumunu hareket ettirmeden dosyada gezinmemi sağlayan bir eklenti yazdım . Bu, konumunuz ile hedef konumunuz arasındaki çizgileri katlamaya ve ardından katın üstünden atlamaya veya iptal etmeye ve hiç hareket etmemeye dayanır.

Bu sadece tıklayarak ortasında ilk satırda imlecin, son satırı ve imlecin arasındaki hızlı anahtara kolay da var j, kya lsen Eklentinin modunda olduğunda.

Sanırım burada iyi bir seçim olurdu.


1

Vim girin ve yazın:

:help z

zyeniden çizim için vim komutudur, bu nedenle dosyayı imleci konumlandırdığınız yere göre yeniden çizer. Sahip olduğunuz seçenekler aşağıdaki gibidir:

z+- Dosyayı, imleç pencerenin üstünde ve satırın ilk boş olmayan karakterinde olacak şekilde yeniden çizer .

z-- çizdiğinde imleç ile dosya alt penceresinin ve hattın ilk boş olmayan karakter de.

z.- Dosyayı, imleç pencerenin ortasında ve çizginizin ilk boş olmayan karakterinde olacak şekilde yeniden çizer .

zt- Dosyayı imleç pencerenin üstünde olacak şekilde yeniden çizer .

zb- Dosyayı, imleç pencerenin altında olacak şekilde yeniden çizer .

zz - Dosyayı imleç konumundayken yeniden çizer pencerenin ortasında olacak şekilde yeniden .

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.