Vim'deki seçimi nasıl ters çevirebilirim?


12

VKomut ile bir dizi satır seçtikten sonra , dosyanın seçili OLMAYAN her satırını silmek istiyorum, bu yüzden seçimi tersine çevirmenin bir yolu var - seçilmeyen her satırı seçin?

Ne gibi

:g!/FOO/d

yok her çizgiyi siler DEĞİL ihtiva FON .

Aklımda bir aralık varsa ve tersini kullanmak istersem:

'a,'b

İki aralığı kullanmam gerekecekti:

1,'a-1

ve

'b+1,$

Bunun bir adımda yapılamayacağından şüpheleniyorum - ama güzel olurdu!


"kırpma" tarzı bir işlem mi istiyorsunuz?
— quack quixote

Yanıtlar:


7

İlk olarak aşağıdaki eşlemeyi oluşturun (örneğin <F4>anahtara bağlı )

map <F4> :<C-U>1,'<-1:delete<CR>:'>+1,$:delete<CR>

görsel modda bir aralık seçtikten sonra, <F4>ilişkili komutu tetiklemek için düğmesine basın . Komut kısımlar halinde kolayca açıklanabilir:

  • " :" Komut satırı moduna girin.
  • " <C-U>" İmleç konumu ile satır başı arasındaki tüm karakterleri kaldırın.
  • " 1,'<-1" Geçerli seçimin başlamasından önceki dosyanın ilk satırından satıra kadar olan aralığı belirtin.
  • " :delete<CR>" Sil (önceden belirtilen satır aralığı).
  • " :'>+1,$:delete<CR>" Aralıktaki satırları sil " '>+1,$", yani seçimin sonundan satırın sonuna kadar.

2
sadece açıklamak gerekirse: 1, '<- 1, 1. satırdan seçimin başlangıcına kadar olan aralıktır. '> + 1, $ seçimden sonra 1 satırdan sona kadar olan aralıktır ...
— akira

Bunu tek bir "delete" komutuyla yapmanın bir yolu var mı?
— Kevin Panko

1
@Kevin Panko: aralıkları tek bir ifadede birleştirmeniz gerekir. belgelere baktım ve aralık sözdiziminin böyle bir şeyi desteklediğini sanmıyorum. vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-ranges ,,, vim.wikia.com/wiki/Ranges
— quack quixote

15
  1. metninizi seçin
  2. "*yggdG"*p yani ...

    "*y    " yank it to the selection register
    ggdG   " delete everything
    "*p    " and paste the selection again 
    

9
ygg "_dGP aynı ama daha kısa.
— Kevin Panko

1
sonunda aynı metni alırsınız, gerçek :)
— akira

Akira ve Kevin Panko cevaplarına atıfta bulunmak istiyorum (yorum ekleyemiyorum). "[o] pposit [d] (v) isual modda vmap od ygg içinde elete" _dGP
— Marcin Rogacki

Github.com/maxbrunsfeld/vim-yankstack gibi eklentiler bu yaklaşımı kolaylaştırır. Silinme tarafından gizlenen yank kaydınız hakkında endişelenmenize gerek yok.
— Jack O'Connor

bu klavye eşleme olarak nasıl eklenebilir .vimrc? Birkaç denemeyi denedim ama henüz yapmadım. Benim girişimleri vardı map <F4> n"*yggdG"*p venmap <F4> "*yggdG"*p
— Brad Parklar

7

Sadece gelecek nesiller için:

:v/\%V/d

Bu, seçimin bir parçası olmayan hatlarda ters bir küresel olur. Şunu unutmayın: v çizgi tabanlı bir yapıdır, bu nedenle, çizgi, akış veya blok seçimi gibi seçimden herhangi birini içeren herhangi bir satır silinir.


1

'ters çevirme' temel olarak 'çoklu seçimler' (orijinal seçimden önce ve sonra kalan alan) oluşturmak anlamına gelir çünkü vimscriptleri tekrar aradım http://www.vim.org/scripts/script.php?script_id=953 . bunu dene.

 There are a number of operations to very
 easily manipulate selections such as modifying 
 the regions (add/delete/inverte/clear), hiding, 
 refreshing, saving and restoring etc."
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.