Saya ingin memasukkan teks seperti ini:
similar text wordA similar text ...
similar text wordB similar text ...
similar text wordC similar text ...
Saya tahu saya dapat menempelkan teks berkali-kali kemudian menggunakan subtitusi untuk mengubah satu kata untuk setiap baris, namun saya masih menemukan metode ini sangat tidak nyaman.
Apakah ada cara untuk menyimpan kata atau daftar kata ke dalam "variabel" kemudian menggunakan variabel ini untuk menghasilkan teks yang serupa?
EDIT Saya membuat sesuatu yang tidak jelas dalam pertanyaan asli, sebenarnya saya mencoba untuk membuat beberapa definisi fungsi yang sangat mirip, jadi wordA
wordB
... mungkin muncul berkali-kali di setiap klon teks dan teks mungkin berisi banyak baris. polanya persis seperti ini:
similar_text1 wordA similar_text2 wordA similar_text3 ...
similar_text1 wordB similar_text2 wordB similar_text3 ...
similar_text1 wordC similar_text2 wordC similar_text3 ...
(teks dapat berisi baris baru, dan wordA, wordB ... mungkin ada berkali-kali)
EDIT ke-2 Bagian "similar_text" mungkin berbeda setiap kali saya melakukan pekerjaan seperti itu, jadi solusi untuk pekerjaan ini lebih baik untuk digunakan kembali. Karena saya mencoba membuat definisi fungsi yang sangat mirip, atau string ke tabel pemetaan fungsi.
Setelah membaca jawaban dan beberapa latihan, saya menemukan bahwa lebih nyaman untuk menganggap pekerjaan ini sebagai semacam penggantian, karena memisahkan "part1", "part2" ... "partN" yang mungkin berisi baris baru sulit untuk ditulis, jadi tulis templat dulu:
similar_text1 $WORD similar_text2 $WORD similar_text3 ...
(text may contain <ENTER>, make sure $WORD not exist in "similar_text" parts )
Kemudian mencoba untuk menempatkan klon teks tetapi mengganti $ WORD dengan daftar kata-kata adalah pemikiran yang lebih lurus.
Jadi sepertinya masalah saya berubah menjadi "bagaimana mengkloning blok teks berkali-kali, tetapi setiap kali dengan mengganti kata kunci di dalamnya dengan kata dari daftar?"
sumber
Jawaban:
Anda dapat menggunakan fungsi berikut:
Dalam variabel
firstpart
dansecondpart
menempatkan teks untuk mengulangi sebelum dan sesudah kata-kata dan dalam daftarwords
masukkan kata-kata yang harus diubah.Kemudian loop akan membuat konten baris untuk setiap kata dalam daftar, masukkan baris dalam buffer dan pergi ke baris baru ini.
Anda kemudian dapat hanya memanggil fungsi:
call GenerateLines()
.Edit Untuk membuatnya lebih mudah untuk memanipulasi Anda juga dapat melewati bagian yang berbeda sebagai argumen, fungsinya akan terlihat seperti ini:
Dan Anda bisa menyebutnya seperti ini:
sumber
call map(a:words, 'a:firstpart . v:val . a:secondpart')
dancall append(line('.'), a:words)
.Strategi saya dalam kasus seperti itu akan bervariasi, tetapi sering kali mengikuti langkah-langkah berikut:
Tulis kata unik, mis
Antara
a) melakukan pencarian dan ganti, mis
b) atau menggunakan mode blok visual, lihat
:h blockwise-visual
. Secara khusus, saya akan memilih kata-kata dan menggunakanI
untuk memasukkan teks yang sama di depan, atauA
untuk menambahkan teks yang serupa setelah.Saya berpendapat bahwa strategi ini masuk akal ketika Anda melakukan tugas mengedit semacam ini relatif jarang. Namun, jika Anda merasa perlu sering melakukan ini, maka Anda harus mengikuti saran @ statox dengan fungsi yang memperluas daftar kata-kata.
sumber
:read
diikuti dengan substitusi Anda sangat masuk akal.Saya akan berpendapat bahwa ini adalah pekerjaan untuk blok visual ( Ctrl+ v). Pertama saya akan menulis semua kata yang berbeda:
Dimulai dengan kursor pada hari pertama
w
saya akan melakukan:Saya dapat mengontrol berapa kolom yang saya butuhkan dengan menekan
A <esc>p
sebanyak yang saya inginkan. Mari kita asumsikan bahwa saya membutuhkan tiga kolom seperti perintah di atas. Sekarang kita punya ini:Dan kursor berada di awal ke-3
wordA
di baris pertama. Selanjutnya saya akan memblokir pilih kolom spasi di antara kolom yang mundur dan menambahkan teks di antaranya. Dari lokasi kursor saat ini:Ini menghasilkan (% menandai posisi kursor):
Ulangi untuk kolom berikutnya:
Dan kolom terakhir / pertama (yang ada di sebelah kiri):
Akhirnya menghasilkan:
Pembaruan: menambahkan screencast
Ini tampaknya banyak mengetik tetapi sebenarnya sangat mudah untuk terbiasa. Ini memberi Anda kebebasan untuk mengubah jumlah kata, jumlah kolom dan bahkan jarak antar kolom.
Kekurangannya adalah Anda perlu mengetahui jumlah kata berbeda yang Anda gunakan. Saya memiliki
5
hardcoded di semua perintah di atas karena itu adalah jumlah baris perintah yang beroperasi.Catatan debugging: semua perintah mulai dan berakhir dalam mode normal, jika Anda menemukan diri Anda dalam mode visual atau menyisipkan di akhir perintah Anda melakukan sesuatu yang salah.
sumber