Her satır için python deyimi nasıl çalıştırılır?


11

Python deyimini kullanarak geçerli satırı değiştiren aşağıdaki örnek kodu aldım:

:py import vim; vim.current.line="["+vim.current.line+"]"

Bu ifadeyi geçerli dosyadaki her satır için nasıl yürütebilirim?

İlgili: Python'u Vim'de nasıl kullanabilirsiniz? stackoverflow'ta

Yanıtlar:


10

pydoVim 7.4'ten beri mevcut olan komutu kullanabilirsiniz, kılavuzda çalışabileceğimden daha iyi nasıl çalıştığı açıklanmaktadır:

: [aralık] pydo {gövde}

Python işlevini "def _vim_pydo (line, linenr): {body}" işlevini, [aralık] içindeki her satır için, işlev bağımsız değişkenleri sırayla, her satırın metnine bir sıra <EOL> ve geçerli olmadan ayarlanmış olarak yürütün satır numarası. İşlev bir dize veya Yok döndürmelidir. Bir dize döndürülürse, geçerli dönüşte satırın metni olur. [Aralık] için varsayılan, tüm dosyadır: "1, $".

Örneğiniz için aşağıdaki gibi bir komut kullanabilirsiniz:

:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line

linenr - 1Çizgiler çünkü orada biraz vim.current.buffer0 endeksli ama Vim 1'den satırları saymak başlar.

Güzel olan şey, Python kodunuzu çeşitli satırlarda çalıştırmak için kolayca özel bir komut tanımlamanızdır:

command! -range=% BracketLines 
    \ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line

1
7.4 sürümünden beri mevcuttur.
kenorb

7

Geçerli tamponu vim.current.buffer, yinelenebilir bir şekilde alabilirsiniz; forher satırı elde etmek için bir döngü kullanın.

Çizgileri atayarak değiştirebilirsiniz; bir araya getirerek şunu elde ederiz:

:py from vim import *
:py for i, line in enumerate(current.buffer): current.buffer[i] = '[%s]' % line

Ayrıca bkz :help python-buffer.

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.