Bagaimana cara saya menempelkan baris kode yang sama sebanyak X kali, tetapi mengubah satu kata setiap baris?

8

Saya sedang menulis daftar HTML, dan saya ingin dapat secara otomatis menempel 10 item daftar di mana teks item adalah satu-satunya hal yang berubah.

Saya bisa melakukannya dengan menggunakan PHP dan kemudian hanya menyalin kode HTML yang diberikan tetapi jika ada cara untuk melewati langkah itu dan melakukannya langsung dari Vim yang akan menghemat banyak waktu saya.

Azmodeus
sumber
4
Lihat plugin github.com/mattn/emmet-vim , mungkin sesuai dengan kebutuhan Anda. Kalau tidak, Anda bisa menggunakan makro untuk melakukannya, apakah Anda tahu teksnya di muka?
nobe4
Ya saya tahu teks apa yang ingin saya taruh di setiap item. Terima kasih untuk saran plugin saya akan melihat di rumah malam ini dan juga melihat ke makro Vim.
Azmodeus

Jawaban:

9

Untuk apa yang ingin Anda lakukan, emmet-vim , seperti yang disarankan nobe4, adalah taruhan terbaik Anda.

Dalam mode insert, li{item $}*10<c-y>,akan diperluas 10 <li>detik dengan item Nprefilled sebagai teks. Anda akan mulai mengedit konten yang pertama. Saat masih dalam mode menyisipkan, menekan <c-y>nakan pindah ke tag berikutnya untuk mengedit.

Jika item daftar Anda bukan urutan teks yang diulang, Anda dapat menggunakan vim-surround untuk membantu.

Contoh daftar teks yang perlu dibungkus:

abc
def
ghi

Jika Anda mulai dengan kursor di suatu tempat di teks, menekan ^vip$<c-v>Stli<cr>akan membungkus setiap baris dengan <li></li>.

^     - move to the first column
vip   - select the paragraph
$     - Move to the last column in the selection
<c-v> - Convert the visual selection into a block. Without the
        previous $, it would only select 1 column.
St    - Start vim-surround's tag entry
li    - The tag name
<cr>  - Enter

Ini dapat dibuat menjadi peta kunci yang mudah digunakan:

nmap <leader>li ^vip$<c-v>Stli<cr>
Tommy A
sumber
1
Anda telah menyelamatkan banyak jari saya kesakitan. Terima kasih Pak.
Azmodeus
1
@Ammodeus Senang itu membantu. vim-surround adalah penguat produktivitas sehingga Anda harus meluangkan waktu untuk mengikuti dokumennya. Dan kalau-kalau Anda tidak tahu, emmet-vim akan bekerja di stylesheet pra-kompilasi seperti sass atau kurang. Misalnya, coba ini dalam file scss:.col$*5>.inner
Tommy A
2

Saya mungkin akan melakukan ini dengan pemetaan:

 :nmap ^B o<li></li>^[4hi

Rencananya adalah menyisipkan ke tag dan kemudian menempatkan sisipan di antara mereka, sehingga Anda dapat mengetikkan teks, melarikan diri kembali ke mode normal dan kemudian melakukan ctrl-b lagi. (PS, ^ B dan ^ [dimasukkan menggunakan ctrl_V, tetapi Anda mungkin sudah tahu itu.) Untuk memasukkan sepuluh baris dalam perintah tunggal, Anda dapat menggunakan

10ctrl_b

Saya tidak jelas apakah Anda memiliki cara otomatis untuk benar-benar membuat teks item?

Tim Ferguson
sumber