4

行の内容全体 (最後の改行を除く) を行自体に追加したい。ここでこの解決策を見まし:%s/$/\*/gた: Vimの各行の最後に文字列を追加するにはどうすればよいですか?

ただし、文字 * を行に追加しています。両方試しまし:%s/$/*/g:%s/$/\*/gが同じ結果でした。

VIM を使用しています - Vi IMproved バージョン 7.3.46

PS: 新しいユーザーとして、この質問をコメントとして投稿することは許可されていないようです。ありがとう。

4

4 に答える 4

10

繰り返しになりますが、コマンドモードは非常に過小評価されています。

:t.|-j

終わり

更新私はあなたが範囲のためにこれをしたいという別のコメントで見ました。これも簡単です。下記参照

これは基本的にExと同等ですyyPJx

  1. レジスターを壊すことはありません
  2. 「0-」9レジスタをシフトしません
  3. 現在の検索および/または検索履歴に影響を与えません(:%sベースの回答のように)
  4. @:マクロやマッピングなしですぐに繰り返すことができます:)
  5. アトミックアンドゥが発生します(このyyPJxアプローチでは3つの個別のアンドゥステップが発生します)

説明:

  • :tの同義語です:copy
  • :jの略です:join
  • :-jの略で:-1join、意味:前の行を後継と結合します

注:先頭の空白を(のyyPgJx代わりにyyPgJx)保持する場合は、次を使用します。

:t.|-j!

視覚的な選択タイプで、繰り返しの更新

:'<,'>g/^/t.|-j

これは、視覚的な選択のすべての行に対してそれを繰り返します。(もちろん、:'<,'>ビジュアルモードで自動的に挿入されます)。このアプローチのもう1つの利点は、複製する行のフィルターを簡単に指定できることです。

:g/foo/t.|-j

現在のバッファーに「foo」を含むすべての行を「複製」します(これを大量のバッファーにスケーリングするには、windo、bufdo、argdoを参照してください)。

于 2012-11-07T23:31:12.217 に答える
6

この置換を使用できます:

:s/^.*$/&&
  • ^.*$.*「行の先頭(^)と末尾( )の間にあるもの()は何でも」を意味$します。
  • &一致したテキストを表すため、行全体をそれ自体に置き換え、その後に再びそれ自体を続けます。

編集

Ingoのコメントは:s/.*/&&的確です。タイピングを減らしても同じことができます。

于 2012-11-07T15:37:01.897 に答える
1

それ自体に追加する行に移動します。次に、次のように入力します。 0y$$p

説明:
0 - 行の先頭に移動する場合
y$ - カーソルから行の末尾まですべてをヤンクする $ - 行
の末尾に移動する場合
p - ヤンク バッファを「配置」する場合

于 2012-11-07T15:34:32.433 に答える
1

試してみませんか: yyPJx.

これにより、現在の行のコピーが自分自身に追加されます。

次のこともできます。

noremap ,l yyPJx

これ.vimrcを実現するためにキーストロークをマップする場合は、.

于 2012-11-07T15:35:04.873 に答える