Làm cách nào để dán cùng một dòng mã X lần nhưng thay đổi một từ trong dòng mỗi lần?


8

Tôi đang viết danh sách HTML và tôi muốn có thể tự động dán 10 mục danh sách trong đó văn bản mục là điều duy nhất thay đổi.

Tôi có thể thực hiện điều này bằng PHP và sau đó chỉ sao chép mã HTML được hiển thị nhưng nếu có cách bỏ qua bước đó và thực hiện trực tiếp từ Vim sẽ giúp tôi tiết kiệm rất nhiều thời gian.


4
Hãy xem plugin github.com/mattn/emmet-vim , nó có thể phù hợp với nhu cầu của bạn. Nếu không, bạn có thể sử dụng một macro để làm như vậy, bạn có biết văn bản trước không?
nobe4

Có, tôi biết văn bản nào tôi muốn đặt trong mỗi mục. Cảm ơn bạn đã gợi ý plugin tôi sẽ xem tại nhà tối nay và cũng xem xét các macro Vim.
Azmodeus

Câu trả lời:


9

Đối với những gì bạn muốn làm, emmet-vim , như nobe4 đề xuất, là đặt cược tốt nhất của bạn.

Trong chế độ chèn, li{item $}*10<c-y>,sẽ mở rộng 10 <li>giây với item Nvăn bản được điền sẵn. Bạn sẽ bắt đầu chỉnh sửa nội dung của cái đầu tiên. Trong khi vẫn ở chế độ chèn, nhấn <c-y>nsẽ chuyển sang thẻ tiếp theo để chỉnh sửa.

Nếu các mục danh sách của bạn không phải là một văn bản lặp lại theo trình tự, bạn có thể sử dụng vim-Surround để trợ giúp.

Danh sách ví dụ về văn bản cần được bọc:

abc
def
ghi

Nếu bạn bắt đầu với con trỏ của bạn ở đâu đó trong văn bản, nhấn ^vip$<c-v>Stli<cr>sẽ bao bọc từng dòng <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

Điều này có thể được tạo thành một bản đồ chính dễ sử dụng:

nmap <leader>li ^vip$<c-v>Stli<cr>

1
Bạn đã lưu ngón tay của tôi đau đớn nhiều. Cảm ơn ngài.
Azmodeus

1
@Azmodeus Vui mừng vì nó đã giúp. vim-Surround là một công cụ tăng năng suất như vậy mà bạn nên dành thời gian để làm theo cùng với các tài liệu của nó. Và chỉ trong trường hợp bạn không biết, emmet-vim sẽ hoạt động trong các bảng định kiểu được biên dịch sẵn như sass hoặc ít hơn. Ví dụ: hãy thử điều này trong tệp scss:.col$*5>.inner
Tommy A

2

Tôi có thể sẽ làm điều này với một ánh xạ:

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

Kế hoạch là chèn vào các thẻ và sau đó đặt phần chèn vào giữa chúng, để bạn có thể nhập văn bản, thoát trở lại chế độ bình thường và sau đó thực hiện lại ctrl-b. (PS, ^ B và ^ [được nhập bằng ctrl_V, nhưng bạn có thể đã biết điều đó.) Để đặt mười hàng trong một lệnh, bạn có thể sử dụng

10ctrl_b

Tôi không rõ nếu bạn có một số cách tự động thực sự tạo văn bản mục?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.