web-dev-qa-db-ja.com

テキストを等号に揃えるvim

読みやすくするために、コードを等号に揃える傾向があります。これから:

$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main

これに:

$       = jQuery.sub()
Survey  = App.Survey
Sidebar = App.Sidebar
Main    = App.Main

Vimでこれを行う簡単な方法はありますか?

35
iblue

私がこれまでに見つけた最高のプラグインは Tabular.vim です。

インストールする最も簡単な方法は、 Pathogen プラグインを使用し、表形式のgitリポジトリを~/.vim/bundle/tabularに複製することです。 。 PathogenREADMEの完全な説明。

インストール後、それを使用するには、位置合わせして実行する段落のどこかにカーソルを置くだけです。

:Tab /=
42
drrlvn

これは物事を行うための最も簡単な方法ではありませんが、プラグインなしで行うことができます。

  • V:s/=/ =/を使用して、それぞれの等号の前に一連のスペースを挿入します。
  • Ctrl-Vを使用して、等号を移動する列を選択します。
  • <<を押して、選択した列に向かって各方程式の右辺を「インデント解除」し、等号がその列に並ぶまで.を繰り返し押します。
14
Tanner Swett

これは Tabular プラグインで簡単にできると思います。 ここで動作しています。

ビジュアルモードで範囲を選択し(実際には必要ありません)、次の手順を実行します。

:Tabularize /=

プラグインは、視覚的に選択したり、exコマンドに範囲を指定したりすることなく、実際にそれ自体で正しい範囲を見つけることができます。

13

プラグインのインストールを伴わない単純なソリューションの場合は、Unix列コマンドでフィルタリングするだけです。

columnコマンドが-oをサポートしているかどうかに応じて、これを行うには2つの方法があることに注意してください。

GNU列コマンド(Linuxなど)

:% ! column -t -s= -o=

それでおしまい。

BSD列コマンド(Mac OS Xなど)

ステップ1、column -tでフィルタリングします。

:% ! column -t

ステップ2、区切り文字の周りのパディングを削除します。

:%s/ = /=/

最初のテキストは

$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main

ステップ1の後、

$        =  jQuery.sub()
Survey   =  App.Survey
Sidebar  =  App.Sidebar
Main     =  App.Main

そしてステップ2の後

$       = jQuery.sub()
Survey  = App.Survey
Sidebar = App.Sidebar
Main    = App.Main

または、1つのステップでそれを実行したい場合:

:% ! column -t | sed 's/ = /=/'

詳細については、man columnをご覧ください。

9
Alex Harvey

表形式の代替プラグイン:

https://github.com/tommcdo/vim-lion

ドキュメントから:

例えば、 glip= 変わるだろう

$i = 5;
$username = 'tommcdo';
$stuff = array(1, 2, 3);

$i        = 5;
$username = 'tommcdo';
$stuff    = array(1, 2, 3);
5
Martin Konecny

vim-easy-align プラグインもそれを行います。与えられた多くの例の1つを次に示します。

Example of vim easy align command

tabularize プラグインをインストールし、Gistを tpope で次のように変更します。

inoremap <silent> :   :<Esc>:call <SID>align(':')<CR>a
inoremap <silent> =   =<Esc>:call <SID>align('=')<CR>a

function! s:align(aa)
  let p = '^.*\s'.a:aa.'\s.*$'
  if exists(':Tabularize') && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
    let column = strlen(substitute(getline('.')[0:col('.')],'[^'.a:aa.']','','g'))
    let position = strlen(matchstr(getline('.')[0:col('.')],'.*'.a:aa.':\s*\zs.*'))
    exec 'Tabularize/'.a:aa.'/l1'
    normal! 0
    call search(repeat('[^'.a:aa.']*'.a:aa,column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
  endif
endfunction
1
rizkix

Align Vimプラグイン を使用して、このようなブロックを整列させることができます。タイピング経由

vip:Align =

コマンドモードで、カーソルが位置合わせされるブロック内に置かれたとき。

ここで、vipは仮想モードに入り、現在の段落を選択します。 Alignコマンドは非常に強力です。複数のパターンを指定することもできます。パターンは正規表現として解釈されます。

1
maxschlepzig

(From this answer in Vi&Vim Stack Exchange :)

プラグインをインストールして学習することなく、ピンチ状態で式を整列させたい場合は、次の方法で簡単に実行できます。

  1. 視覚的な選択で線を選択します。たとえば、これがバッファ全体である場合は、ggVGを使用できますが、これらの行がファイルの途中にある場合は、適切に選択してください。おそらく_V4j_?
  2. _=_の前に十分な空白を挿入します。これは_:normal f=9i_で実行できます。 (最後の「スペース」に注意してください。)これにより、ビジュアル選択の行の各_=_の前に9つのスペースが追加されます。 9では不十分な場合は、さらに追加します(99や999など)。視覚的に選択して_:_と入力すると、Vimが自動的に範囲を挿入するため、実際のコマンドは_:'<,'>normal f=9i_ですが、これらの文字を入力する必要はありません。
  3. _=_ sをフラッシュする列に移動します。この場合、2行目は変数名が最も長いため、その名前の終わりの後の2つのスペースに移動します。これは、_=_ sが最後にあるはずの場所です。これがバッファ全体である場合は、_2G2e2l_を使用してそこに到達できます。
  4. 同じ列にとどまり、ブロックの最初の行に移動します。この場合、2行目から1行目に移動しているので、kで十分です。
  5. _Ctrl-V_を押して、ビジュアルブロックの選択を開始します。
  6. ブロックの最後の行に移動します。これがバッファ全体である場合は、Gを使用できます。これがファイルの途中である場合は、_4j_を使用して4行下に移動できます。
  7. これで、_<_コマンドを使用して、行を左にシフトできますが、視覚ブロックの左側に到達するまでです。各_<_はそれらを1つだけ_'shiftwidth'_シフトするため、複数必要になる可能性があります。したがって、確かに、_9<_(または、手順2で大量のスペースを追加した場合は、_99<_、または_999<_)を使用してください。

Voilà!

これはかなりクールなテクニックであり、プラグインが提供できる以上の柔軟性が必要な場合に役立ちます。 Vimツールボックスを学び、それを維持するのは良いことです。

また、_=_以外の異なる基準に揃える場合、たとえば、各行の3番目の列(3番目のWord)に揃える場合は、手順2で_:normal 2W9i_を使用します。

0
filbranden