9

複数の行にまたがる変数の割り当てを調整するのに役立つマップされたvimコマンドを作成したいと思います。ファイルに次のテキストがあるとします。

foo                     = 1;
barbar            = 2;
asdfasd    = 3;
jjkjfh                = 4;
baz              = 5;

複数の行を選択して以下の正規表現を使用すると、列10がすべての行の空白にあることに注意してください。列10の後の空白は、等号まで削除されます。

:'<,'>s/^\(.\{10}\)\s*\(=.*\)$/\1\2/g

結果は次のとおりです。

foo       = 1;
barbar    = 2;
asdfasd   = 3;
jjkjfh    = 4;
baz       = 5;

視覚的なブロック選択の実行中に現在のカーソル位置(具体的には列の位置)を取得し、その列を正規表現で使用する方法はありますか?

または、選択した行の等号の最大列を見つけて空白を挿入し、すべての等号が列ごとに整列するようにすることが可能な場合は、前の問題を解決するよりも優先されます。すばやく変換することを想像してみてください。

foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;

に:

foo     = 1;
barbar  = 2;
asdfasd = 3;
jjkjfh  = 4;
baz     = 5;

ブロック選択とキーコンボを使用します。

4

3 に答える 3

7

TabularとAlignに完全に満足しているわけではありませんが、最近、vim-easy-alignと呼ばれる別の同様の単純なプラグインを作成しました。

デモのスクリーンキャストをチェックしてください:https ://vimeo.com/63506219

最初のケースでは、行を視覚的に選択し、コマンド:EasyAlign=を入力してトリックを実行します。

次のようなマッピングを定義した場合、

vnoremap <silent> <Enter> :EasyAlign<cr>

2回のキーストロークで同じことができます:Enter=

コメントでおっしゃったケース、

final int foo = 3;
public boolean bar = false;

「:EasyAlign * \」コマンドを使用するか、前述のマッピング、Enter、、*およびスペースキーを使用して簡単に位置合わせできます。

final  int     foo = 3;
public boolean bar = false;
于 2013-05-02T10:19:42.640 に答える
7

プラグインなし

この場合

foo = 1
fizzbuzz = 2
bar = 3

マクロを使用して多くのスペースを追加できます。

0f=10iSPACEESCj

ここで、10は、十分なスペースを追加するための任意の数値です。

マクロをM回(M行の場合)適用して、

foo           = 1
fizzbuzz           = 2
bar           = 3

次に、列Nまでのすべての文字を削除するマクロを使用して余分なスペースを削除します。

0f=d12|j

ここで、12は整列する列番号で、|は縦棒(SHIFT + \)です。Together12|は、「列12に移動」コマンドです。

行ごとに繰り返して、

foo        = 1
fizzbuzz   = 2
bar        = 3

2つのマクロを1つに組み合わせることができます。

0f=10iSPACEESCd11|j

于 2020-05-30T00:53:04.937 に答える
5

そのための2つのプラグインがあります:古いAlign-人々がテキスト、eqns、宣言、テーブルなどを整列するのを助けるか、または表形式です。

于 2013-01-26T17:48:28.493 に答える