5

行が短い場合でも、vimの特定の行に文字を配置する方法はありますか?

たとえば、79列幅のコメントブロックスタイルで、両端にコメント文字があるプロジェクトに貢献しています。

!--------------!
! Comment      !
! More Comment !
!--------------!

しかし、大きな数字を推測しても、スペースを空けるのは本当に面倒です(35i <SPACE> <ESC>)

私のためにこれを行う簡単なコマンド、またはマクロまたは私が書くことができる何かがありますか?

4

5 に答える 5

9
set ve=all

次に、(h、j、k、l) を任意の場所に移動できます。あなたのラインがどんなに短くても。

block, all, insert, onemore詳細には 4 つのオプションがあります。

小切手 :h virtualedit

このように、短いコメントを入力した後、次のように入力<ESC>080lして、適切な場所の末尾に移動します!

頻繁に使用される場合は、マップすることもできます

次に、次のように機能します。

ここに画像の説明を入力

于 2013-01-18T14:53:12.373 に答える
2

これを.vimrcファイルに入れて、vim を再起動します。

inoremap <F1> <C-r>=repeat(' ', 79-virtcol('.'))<CR>!<CR>

これにより、F1コメントテキストを入力した後に挿入モードで(またはマップした任意のキーを)押すだけで、自動的にスペースが埋め込ま!れ、79 列目に a が挿入されます。

別の簡単な方法は、正しいサイズの空のコメント ボックスをどこかに保持し、必要な場所にヤンク/ペーストし、Rその中のスペースを毎回コメントに置き換えることです。

短すぎるボックスを再フォーマットする場合、1 つの方法は、例のコメントから開始し、右端のすぐ左にある単一の列を選択するビジュアル ブロック ( Ctrl+ ) を作成し、それをヤンク ( )することです。 、繰り返し貼り付けます ( )。これにより、コメントの右側全体が 1 ステップずつ移動し、ボックスが右方向に拡張されます。好みの長さになるまで繰り返します。vyp

コメント テキストを既に入力している場合は、マクロを使用して正しい場所に右側の!マークを追加できます。たとえば、qa任意の行に必要以上の文字を追加するマクロ ( ) を記録し (例80ASpaceEsc)、goto 列 ( |) を使用して正しい場所に移動し79|( )、そこから余分な文字を置き換えてから ( C!Esc)、下に移動します。 1行(j)、録音を停止(q)します。このマクロ ( @a) を繰り返すと、各行が順番に「修正」され、次の行に移動します。合計:qa80A<space><esc>79|C!<esc>jqそして@a必要なときはいつでも。複雑に聞こえますが、一度持っておくと便利です。

于 2013-01-18T14:36:52.017 に答える
1

ここには確かに良い答え、特に virtualedit の答えがあります。ただし、私にとって最も直感的な方法はわかりません。感嘆符で囲まれたコメントの最後の行に空の行を作成します。次に、空の行の新しいコピーをヤンクして貼り付け、古い空の行に移動して、編集したいポイントに移動し、上書きモード ( R) を使用して、最後の感嘆符の配置に影響を与えずにテキストを追加します。 .

場合によっては、最も単純な方法が、やや不格好ですが、最も使いやすく、覚えやすいものです。

于 2013-01-18T16:30:59.307 に答える
0

私は通常、コメントブロックに既存の行をコピーして貼り付け(または別のファイルからコピーして)、それを変更します。置き換えるテキストが書きたいテキストとほぼ同じサイズである場合(たとえば、作成者の名前を変更する場合)、すべてを揃えるには、おそらくいくつかのスペースを追加または削除するだけで済みます。希望の幅に間隔を空けるよりもはるかに苦痛が少ないです。

この方法でブロックが長くなりすぎる場合は、79番目の列にカーソルを置いて。を押すのが賢明dwです。これにより、最後までのすべてのスペースがクリアされます!

于 2013-01-18T15:06:53.997 に答える
0

私のAlignFromCursor プラグインは、カーソルの右側のテキストのみを整列し、左側のテキストを変更しないままにするコマンドとマッピングを提供します。したがって、カーソルを末尾の の左の空白に置くと!、それを に揃えることができます<Leader>ri

于 2013-01-18T15:17:21.127 に答える