同じコード行をX回貼り付けますが、そのたびに行の1ワードを変更するにはどうすればよいですか?


8

私はHTMLリストを作成していて、10個のリストアイテムを自動的に貼り付けることができるようにしたいのですが、アイテムのテキストだけが変更されます。

PHPを使用してこれを実現し、レンダリングされたHTMLコードをコピーするだけで済みますが、そのステップをスキップしてVimから直接実行する方法があれば、時間を大幅に節約できます。


4
プラグインgithub.com/mattn/emmet-vimをご覧ください。あなたのニーズに合うかもしれません。それ以外の場合は、マクロを使用して実行できますが、事前にテキストを知っていますか?
nobe4

はい、各アイテムに挿入するテキストを知っています。プラグインの提案をありがとうございました。今夜自宅を見て、Vimマクロも調べます。
Azmodeus

回答:


9

あなたがやりたいことについては、nobe4が示唆するように、emmet-vimが最善の策です。

挿入モードでli{item $}*10<c-y>,は、テキストとして事前入力された状態で10 <li>秒展開item Nします。最初のコンテンツの編集を開始します。挿入モードのまま、を押す<c-y>nと、編集のために次のタグに移動します。

リスト項目がシーケンスの繰り返されるテキストでない場合は、vim-surroundを使用して支援できます。

折り返す必要があるテキストのリストの例:

abc
def
ghi

カーソルをテキストのどこかから始めた場合、を押す^vip$<c-v>Stli<cr>と各行がで囲まれ<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

これは、使いやすいキーマップにすることができます。

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

1
あなたは私の指を大いに救った。ありがとうございます。
Azmodeus 2016年

1
@Azmodeusうれしいです。vim-surroundは生産性を大幅に向上させるので、時間をかけてドキュメントを理解する必要があります。そして、あなたが知らなかった場合に備えて、emmet-vimはsass以下のようなコンパイル済みのスタイルシートで動作します。たとえば、scssファイルでこれを試してください:.col$*5>.inner
Tommy A

2

私はおそらくマッピングでこれを行うでしょう:

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

計画は、タグに挿入してからその間に挿入を配置することです。これにより、テキストを入力し、通常モードに戻り、ctrl-bを再度実行できるようになります。(PS、^ Bおよび^ [はctrl_Vを使用して入力されますが、おそらくすでに知っています。)単一のコマンドで10行を入力するには、次のように使用できます。

10ctrl_b

アイテムテキストを実際に作成する自動方法があるかどうかはわかりませんでしたか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.