Vim artımlı çizgiler yazabilir mi? yani her bir satırda A B olur ve 1 2 olur


8

Bunu yazmak istedim:

A = mapping[0]
B = mapping[1]
C = mapping[2]
D = mapping[3]
E = mapping[4]
F = mapping[5]
G = mapping[6]
H = mapping[7]
I = mapping[8]
J = mapping[9]
K = mapping[10]
L = mapping[11]
M = mapping[12]
N = mapping[13]
O = mapping[14]
P = mapping[15]
Q = mapping[16]
R = mapping[17]
S = mapping[18]
T = mapping[19]
U = mapping[20]
V = mapping[21]
W = mapping[22]
X = mapping[23]
Y = mapping[24]
Z = mapping[25]

Sonunda LibreCalc'i kullandım, farklı parçaları farklı hücrelere koydum, harfleri ve sayıları ekledim, sonuçları birleştirdim ve lotu Vim'e geri yapıştırdım.

Yazmak istediğim şeyin kötü bir kod olduğunu takdir ediyorum. Şu anda Python üzerinde çalışıyorum ve takip ettiğim derste ( http://interactivepython.org/ ) ele alınacağını bildiğim bilgileri kendim bulmaktan kaçınmaya çalışıyorum .

Bunu vim'de yapmanın en hızlı yolu şunun gibi bir şey yazmaktı:

A = mapping[0] <ESC> hh <CTRL>+<V> BBh y $ o B <ESC> y 1] <CR>

Vim'in çok güçlü olduğunu biliyorum (Birkaç haftadır kullanıyorum, gerçekten keyif alıyorum).

İstediğimi vim komutuyla yazmak mümkün mü?

Yanıtlar:


11

Komut dosyası ile yapılabilirken, Vim'in çok yeni bir sürümüne (örneğin Arch Linux'taki) sahipseniz, g Ctrl-agörsel bir bloğu artırmak için kullanabilirsiniz . Senin durumunda:

  1. Orijinal satırı yazın: A = mapping[0] Esc
  2. Yank hattı ve 25 kopyasını aşağıya koy: yy25p
  3. Karakter çizgisini içeren sütunu görsel olarak seçin 0(blok seçimi, kullanarak Ctrl-v), 01. satırdan hariç tutun (böylece son 25 sıfırı içeren bir sütunla sonuçlanırsınız) ve ardından ile artırın g Ctrl-a.
  4. İçeren sütun için aynı yöntemi uygulayın A.

( Not : Yorumların gösterdiği gibi, harfleri arttırabilmekalpha için nrformatsseçeneklere eklemek gerekir , örneğin set nrformats+=alpha:. Vimrc'mde şunlar vardır: set nrformats=hex,alphaböylece kullanmadığım sekizli ve ikili artışı devre dışı bırakmak)


yy benim için çalışmıyor. Www.vimcheatsheet.com adresinden yazdırdığım hile sayfasında bunun çok standart bir komut olduğunu görebiliyorum. vim --version bunu döndürür: pastebin.com/DcFxZh1S . Benim için neden işe yaramadığını araştırmam gerekecek ... (Görsel komut ve ekleme modlarında denedim). Ayrıca yapıştırdığımda her şey aynı satırda görünüyor. Ancak g Ctrl-a denedim ve tam olarak istediğimi yapıyor, teşekkür ederim :)
Duncan Betts

1
:verbose map ysize hangi haritalamaların başladığını yve nerede ayarlandığını göstermelidir. Ancak yynormal modda kullanmanız gerekir .
VanLaser


1
Ne sürümü vimartırır Aetmek Bile Ctrl-aeylem? Benimki kesinlikle değil, ben de varım 7.4 1-1202.
Cory Klein

4
@CoryKlein Yazmayı deneyin :set nrformats+=alpha. Bu değer katacak alphaseçeneğe 'nrformats've izin vermelidir Ctrl-a"artım" alfabetik karaktere. Bu davranışı beğendiyseniz, vimrc'nize ekleyebilirsiniz. Aksi takdirde, operatöre seçenekle ekleyebilir +=ve daha sonra operatörle -=( :set nrformats-=alpha) kaldırabilirsiniz .
saginaw

6

@VanLaser'ın kullandığı görsel artış çözümünü tercih ederim (Bkz. :h v_CTRL-A). Ancak bunun makro üzerinden de yapılabileceğini göstereceğim.

İle başla:

A = mapping[0]

Aşağıdaki tuş basmalarını istediğiniz makroya kaydedin (örn. q):

yyp:set nrformats+=alpha<cr><c-a>:set nrformats-=alpha<c-a>

Bu, satırı çoğaltır ve sonra ilk karakteri artırır (örneğin A) ve sonra sayı bölümünü artırır. Bu makroyu 24 kez çalıştırın ve işiniz bitti, örn 24@q.

  • qq - kayda kayıt yapmaya başlayın q
  • yyp - satırı çoğalt
  • :set nrformats+=alpha<cr>- 'nrformatsyok alphavarsayılan olarak
  • <c-a>- alphaArtık harfleri artırabiliriz
  • :set nrformats-=alpha<cr>- kaldırma alphadan'nrformats'
  • <c-a> - sonraki sayıyı artırma
  • q - Kaydetmeyi bırak
  • 24@q- makroyu q24 kez tekrar oynat

Daha fazla yardım için bkz:

:h q
:h @
:h yy
:h p
:h 'nrformats'
:h :set
:h CTRL-A
:h v_CTRL-A

İyi biri :) 25?
VanLaser

1
@VanLaser: 1 (başlangıç ​​çizgisi) + 1 (makroyu kaydetme) + 24 = 26.
Peter Rincker

4

Güzel cevaplar zaten sağlanmıştı, bu kadar güzel gitmeyi düşünmezdim. Tek bir satırdaki tüm harfleri yazardım ve daha sonra bir ifade ikamesi (artan sayı için satır numarasını kullanarak) ile metin ve satır sonu eklerdim

iABCDEFGHIJKLMNOPQRSTUVXYZ<Esc>:s/./\=submatch(0)." = mapping[".line('.')."]\n"/g

çok havalı ! (+1)
JJoao

2

Neredeyse her zaman böyle bir şey yaparken, :substitutemakroları kullanmayı tercih ederim . Özellikle başlangıçta yerine konan ifadeyi değerlendirme yeteneği \=bunu mümkün kılar (bkz. :h sub-replace-special).

Boş satırlar ( 25i<Enter><Esc>) yerleştirildikten sonra , komutu kullanabilirsiniz

:1,26s/^/\=nr2char(line('.')+64) . ' = mapping[' . (line('.')-1) . ']'

gerekli diziler '.'işlev tarafından döndürülen geçerli satır ( bağımsız değişken) numarası line()kullanılarak ve ondalık sayıları ASCII eşdeğerlerine (65 = A) dönüştürmek için nr2char () kullanılarak oluşturulur. Gerekli dizeler kullanılarak birleştirilir.


1

İşletim sistemini her zaman kullanmayı deneyebilirsiniz ...

:r ! perl -E 'for(A..Z){say "$_ = mapping[", ord($_)-64 ,"]"}'

1
Perl işletim sisteminde değil.
dash-tom-bang
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.