Vim'de iki satırı nasıl değiştiririm?


94

Bu bende var:

pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit

Ve bunu almak istiyorum:

pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title

Bunu klavye kısayollarını kullanarak hızlı bir şekilde yapmanın bir yolu var mı?


Vim'e aşina değilseniz farklı bir düzenleyici kullanmayı düşünebilirsiniz. Yalnızca kullanarak ya Git için editör yapılandırabilirsiniz git config --global core.editor <whatever>dahil ederek (GIT dahil) aynı anda bir çok şeyler için ya, export EDITOR=<whatever>Gözlerinde farklı .bashrc.
Sven Marnach

Yanıtlar:


160

Mevcut satırı bir sonrakiyle değiştirmek için ddpkomut kipindeyken yazın.

  • dd - satırı sil (aslında diğer düzenleyicilerde kesim denir) ve kayıt defterine kaydedin
  • p - kayıttan satırı yapıştır

3
İmleci ilk satıra getirin, ardından yazın ddp. Henüz komut modunda değilseniz, komut moduna Escgeçmek için tuşuna basın.
Sven Marnach

32
ddmevcut satırı bir "kayıt" içine kopyaladıktan sonra siler. pyazmacın içeriğini geçerli satırdan sonra arabelleğinize kopyalar ("koyar") . Benzer şekilde, iki karakteri ile xpveya iki kelimeyi ile değiş tokuş edebilirsiniz dwwP.
Keith Thompson

@KeithThompson maalesef iki kelimeyi değiştirmek kadar kolay değil.
CS

@CS dwwPİki kelime bir satırın sonunda ise aynı şekilde çalışmadığı gerçeğinden mi bahsediyorsunuz ? (Ve bir satırdaki son kelimeyi sonraki satırdaki ilk kelimeyle değiştirmek daha da yanıltıcıdır.)
Keith Thompson

1
@KeithThompson evet, yorumumu yaptıktan sonra kendimi biraz kötü hissettim çünkü bu gerçek bir uç durum;)
CS,

52

ddmevcut satırı siler, ardından kaldırılan satırı kullanarak yapıştırabilirsiniz p. Kullanmanın başka bir yolu var m. İle mhatları hareket ettirebilirsiniz ie

:m 1 1. satırdan sonra mevcut satırı taşıyacak

:m 0 mevcut satırı en üste taşıyacak

:m $ mevcut satırı en alta taşıyacak

Örneğinizde, imleci ilk satıra getirin ve yazın :m $

Daha fazla bilgi: http://vim.wikia.com/wiki/Moving_lines_up_or_down


1
Vim olmayan "yerliler" için açıklama için teşekkürler :-)
Bruno Bieri

1
Vim bilgimi genişletmek için aradığım cevap da buydu.
Phemelo Khetho

Teşekkürler! Bu aradığım cevap. Bu, görsel modu kullanarak aynı anda birden fazla satırı kaydırırken daha da kullanışlı hale gelebilir.
Kareem Jeiroudi

8

Sorusu oldukça eski ve cevap olarak işaretlenmiş olmasına rağmen, sana tarafından sağlanan normal mod komutlarını kullanabilirsiniz söyleyerek cevap uzatmak istediğiniz Sven Marnach ile nnoremapşöyle:

:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp

Bu, dosyanız içinde Ctrl+ Upve Ctrl+ Downolan satırları taşımanıza izin verecektir . Ancak bu, @"son kopyaladığınız dizginizi / kelimenizi / harfinizi / vb. Saklayan register üzerine yazacaktır . Bu yüzden önce ddve pkomutlarını ekleyerek bunu düzeltebiliriz:

:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap

Burada "asatırımızı @akayıtta saklamak için silme ve yapıştırma komutlarını ekliyoruz , böylece varsayılan kopya kaydınızın üzerine yazılmaz. Bununla birlikte, @aregister içeriğinin üzerine yazabilir (kim bilir, ancak bunu kullanım durumunuzda önemli bir şey için kullanabilirsiniz, ancak bu adım biraz paranoyaktır, isterseniz atlayabilirsiniz), hadi bunu da düzeltelim:

:nnoremap <silent><C-Up> :let save_a=@a<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
:nnoremap <silent><C-Down> :let save_a=@a<Cr>"add"ap:let @a=save_a<Cr>

( <silent>Komutlarımızın alttaki mesaj satırına yansımasını önlemek için gerekli.)

Artık dosya içindeki satırları klavye kısayollarıyla hareket ettirmemize izin veren iki eşlememiz var. Sen düğmeleri yeniden tanımlayabilirsiniz, kullandığım Alt+ j/ kolacağını, <A-j>ve <A-k>bu komutlar için. Bununla birlikte, tüm uçbirim öykünücüleri AFAIK Alt tuş eşlemelerini desteklemez.



0

Vim wikia sayfasında önerilen eşlemeler , Sublime ve diğer editörlerin bu özelliği uygulama şeklini taklit eden tuş kombinasyonlarını eşlemenin en iyi yoludur.

Bu, hareketten sonra bir girinti eylemini içerir, ki bu da harikadır ( ==bunu istemiyorsanız çift ​​eşittir işaretidir).

Ayrıca , düzenleme sırasında veya fulblock'larla satırları taşıyabilmeniz için görsel ve ekleme modlarını da destekler .

nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv

Ben şahsen onları eşleştirilmiş <D-J>ve <D-K>yerine benim Mac <A-eşleştiren hangi Altanahtarın. Bu şekilde parmak uçlarıma daha doğal gelen Cmd+ Shift+ j/ kullanıyorum k.

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.