Son açtığım, ancak değiştirmediğim dosyalardaki konumlara atlamak için işaretleri nasıl kullanabilirim?


11

Çoğu zaman bir dosyayı düzenlerim - işimin bittiğini düşünüyorum - sonra dosyayı kapatın ve bir sonraki işleme geçin. Ama sonra bu koda geri dönüp biraz daha ince ayar yapmam gerektiğini fark ettim.
Dosyayı tekrar .açarsam , işaretini kullanabilir ve ile son düzenlemenin konumuna atlayabilirim '..
Şimdi yakın zamanda ziyaret ettiğim, ancak değiştirmediğim dosyalarda yerlere atlamak için vim işaretlerini kullanmanın bir yolunu bulmaya çalışıyorum.
Manuel olarak bir işaret ayarlayabileceğimi biliyorum, ancak çoğu zaman geri gelmeyi beklemiyorum ve bu yüzden bir işaret ayarlamıyorum ve vim'in otomatik olarak oluşturduğu bir işaret kullanmam gerekiyor.
Bu "işaret, bunu başarmanın bir yolu olabilir gibi görünüyor :h motion.

" Geçerli tampondan son çıkarken imleç konumuna. Varsayılan olarak ilk satırın ilk karakteri. Son konum atlama | bunun her açılan dosya için nasıl kullanılacağına dair. Tampon başına yalnızca bir konum hatırlanır, her pencere için bir konum değil. Arabellek bir pencerede göründüğü sürece konum değişmez. {Vi içinde değil}.

Ancak ben

  • bir tampon gösteren tüm pencereleri kapatın (ancak tampon hala tampon listesinde bulunmaktadır). veya:
  • tamponun tüm örneklerini öldür

işaret güncellenmiyor gibi görünüyor, arabellek / dosyadaki son imleç konumunun bir konumuna atlamak için nasıl işaret kullanabilirim?


2
Daha fazla bilgi için ... Ctrl+ove aradığınızı düşünüyorumCtrl+i:h jump-motions
Sundeep

@spasic bu kötü bir öneri değil, ama birkaç düzine sıçrama yaptığınızda, pozisyon büyük bir atlama listesinde kaybolacaktı. İşaretleri ara belleğe
yazarak

Zaten okumadıysanız, bu ipucunun ilginç olacağını düşünüyorum . Belki de viminfo
ince

@statox teşekkürler. Bunu gördüm ve vim yardımındaki ipucu. Bence bu çözümler "bir dosyayı açtığınızda işarete otomatik atlamaya neden oluyor. Gerçekten sadece son imleç konumuna manuel olarak atlamak istedim. Ayrıca, "işaretin ne zaman ayarlanıp güncellendiğini anlayamadım, bu yüzden bana "işaret kullanılamaz.
the_velour_fog

Yanıtlar:


6

İşte klasik bir çözüm: kullanın

`H

son HTML dosyasına atlamak vb ...

augroup VIMRC
  autocmd!

  autocmd BufLeave *.css  normal! mC
  autocmd BufLeave *.html normal! mH
  autocmd BufLeave *.js   normal! mJ
  autocmd BufLeave *.php  normal! mP
augroup END

2
teşekkürler, bu gerçekten yararlı olabilir gibi görünüyor. Denemek için vimrc'ye yükledim. Ben WinLeavefark BufLeaveetmediğim için autocmd olarak değiştirdim, bir bölmeyi kapattığınızda ve arabellek hala başka bir yerde açıkken ateş gibi görünmüyor. Ben bir kenar durumda biraz biliyorum, ama WinLeave"dosya kapatma" türü durumlar daha geniş bir yelpazede üzerinde çalışmak gibi görünüyor, ama yine de sadece test ediyorum ...
the_velour_fog

3

Çalıştığı anlaşılan bu vimscript deyimini yazdım

autocmd BufLeave * :normal ml

açıklama

  • BufLeave otomatik komut: Bu,
    • başka bir pencereye git
    • arabelleği görüntüleyen son pencereyi kapattığınızda
    • tamponun kendisini kapattığınızda bd
  • :normal- varsayılan olarak, commandautocmd'nin bir parçası eski bir komuttur. Vim'e normal mod komutunu çalıştırmasını söylemek için,:normal
  • ml- bir işaret lkoy (anımsatıcı: son )

kullanım

tamponda son bulunduğunuz andan itibaren imleç konumunu hatırlamak için

'l

veya

`l

0

İmlecinizin viminfo tarafından bilinen son konumu geri yüklemesini isterseniz,

autocmd BufReadPost * call setpos(".", getpos("'\""))

romainl'in cevabı benim için özellikle yararlı oldu ve bunu çok kullanıyorum (bir web geliştiricisi olduğum için):

augroup VIMRC
    autocmd!
    autocmd BufLeave,WinLeave *.html normal! mH
    autocmd BufLeave,WinLeave *.css normal! mC
    autocmd BufLeave,WinLeave *.js normal! mJ
augroup end

nnoremap <space>h `Hzz
nnoremap <space>c `Czz
nnoremap <space>j `Jzz

Potansiyel olarak faydalı olan son şey seçenek :help 'nostartofline:

               *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
'startofline' 'sol' boolean (default on)
            global
            {not in Vi}
    When "on" the commands listed below move the cursor to the first
    non-blank of the line.  When off the cursor is kept in the same column
    (if possible).  This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
    CTRL-F, "G", "H", "M", "L", gg, and to the commands "d", "<<" and ">>"
    with a linewise operator, with "%" with a count and to buffer changing
    commands (CTRL-^, :bnext, :bNext, etc.).  Also for an Ex command that
    only has a line number, e.g., ":25" or ":+".
    In case of buffer changing commands the cursor is placed at the column
    where it was the last time the buffer was edited.
    NOTE: This option is set when 'compatible' is set.
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.