Tamponun tamamı için bir metin nesnesi var mı?


28

Sık sık kendimi gg"+yGya da gibi komutlar yazarken buluyorum ggdGve imleci iki kez hareket ettirmek zorunda kalmadan bunun için daha etkili bir yol istiyorum. y[movement]İmleci hareket ettirmeden tüm tampon belleğin kopyalanması için kullanabileceğim herhangi bir komut var mı ?

Yanıtlar:


36

Vim, geçerli tamponu referans almak için yüzde işaretini kullandığından, her şeyi hızlı bir şekilde almak için kullanabilirsiniz.

:%yTamponun tamamını :%y+çalacak +(ve vim'in uygun seçeneklerle derlenmesi şartıyla, muhtemelen pano).

:%dve :%d+silme için aynısını yapacağız.

Bu durumların her birinde imleç yerinde kalır.


Vay, tüm bu zaman boyunca kullanıyordum mmgg"+yG`mve bunu hiç düşünmedim. Teşekkürler, bu doğru .vimrc de gidiyor.
Doorknob

@Doorknob ayarlamak ve işaretleri kullanmak yerine C-ogeri dönmek için iki kez kullanabilirsiniz .
Ruslan

10

Başka bir çözüm, vim-textobj-whole adında bir eklenti kullanmaktır . Varsayılan olarak, bu eklenti, boş ve boş satırlar dışındaki tüm tampon için aetamponun tamamı için metin nesnesi sağlar ie.

Bu eklenti , aynı yazar tarafından vim-textobj kullanıcısına bağlı olup, kullanıcıların herhangi bir metin nesnesini rahatça tanımlamasına olanak tanır. Bunu iyi kullanan birçok eklenti var.


8

Varsayılan olarak tüm dosya için metin nesnesi yoktur, ancak bunları kullanarak oluşturmak mümkündür omap. Bu durumda, şuna benzer bir şey olurdu:

onoremap f :<c-u>normal! mzggVG<cr>`z

İşte nasıl çalıştığının bir dökümü:

onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker

Notlar:

Ctrluİmleç pozisyonunun solundaki her şeyi silmek için komut satırı modunda kullanılabilir. Bunun yapılmasının nedeni, komut satırına doğrudan görsel moddan girerseniz, komut satırına otomatik olarak girecektir ve '<,'>istediğimiz şey bu değildir. Ben de başka bir şey kullanmak öneririm fçünkü fnormalde sonraki satırda karakteri arandı geçmek için kullanılır. Örneğin , geçerli satırda bir fisonrakine gidecektir i.

İlgili yardım konuları:

:help omap-info
:help :normal
:help c_CTRL-U
:help v_:

İmleci yalnız bırakırken bunu yapmanın bir yolu var mı?
Random832

@ Random832 Sona bir a eklemek ``, imleci bir önceki konuma döndürür.
SnoringFrog

Bunun seçimin yank komutuna uygulanmamasını sağlayacağından endişe ediyorum. Bugün biraz deneyeceğim.
Random832

1
Eşlemeye bir işaretleyici komutu ekledim, imleci şimdi bulunduğu yerde bırakmalı.
EvergreenTree

2

İşte görevi tamamlamak için bazı hızlı n 'kirli eşlemeler:

nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>

Şimdi sırasıyla yYve dDyank / delete kullanabilirsiniz . Tam gelişmiş bir metin nesnesi kullanmak kadar hoş değil, ancak bazen en basit çözümler en iyisidir.

Daha fazla yardım için bkz:

:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
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.