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.