読みやすくするために、コードを等号に揃える傾向があります。これから:
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
これに:
$ = jQuery.sub()
Survey = App.Survey
Sidebar = App.Sidebar
Main = App.Main
Vimでこれを行う簡単な方法はありますか?
私がこれまでに見つけた最高のプラグインは Tabular.vim です。
インストールする最も簡単な方法は、 Pathogen プラグインを使用し、表形式のgitリポジトリを~/.vim/bundle/tabular
に複製することです。 。 PathogenREADMEの完全な説明。
インストール後、それを使用するには、位置合わせして実行する段落のどこかにカーソルを置くだけです。
:Tab /=
これは物事を行うための最も簡単な方法ではありませんが、プラグインなしで行うことができます。
V
と:s/=/ =/
を使用して、それぞれの等号の前に一連のスペースを挿入します。<<
を押して、選択した列に向かって各方程式の右辺を「インデント解除」し、等号がその列に並ぶまで.
を繰り返し押します。これは Tabular プラグインで簡単にできると思います。 ここで動作しています。
ビジュアルモードで範囲を選択し(実際には必要ありません)、次の手順を実行します。
:Tabularize /=
プラグインは、視覚的に選択したり、exコマンドに範囲を指定したりすることなく、実際にそれ自体で正しい範囲を見つけることができます。
プラグインのインストールを伴わない単純なソリューションの場合は、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
をご覧ください。
表形式の代替プラグイン:
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);
vim-easy-align プラグインもそれを行います。与えられた多くの例の1つを次に示します。
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
Align Vimプラグイン を使用して、このようなブロックを整列させることができます。タイピング経由
vip:Align =
コマンドモードで、カーソルが位置合わせされるブロック内に置かれたとき。
ここで、vip
は仮想モードに入り、現在の段落を選択します。 Align
コマンドは非常に強力です。複数のパターンを指定することもできます。パターンは正規表現として解釈されます。
(From this answer in Vi&Vim Stack Exchange :)
プラグインをインストールして学習することなく、ピンチ状態で式を整列させたい場合は、次の方法で簡単に実行できます。
ggVG
を使用できますが、これらの行がファイルの途中にある場合は、適切に選択してください。おそらく_V4j
_?=
_の前に十分な空白を挿入します。これは_:normal f=9i
_で実行できます。 (最後の「スペース」に注意してください。)これにより、ビジュアル選択の行の各_=
_の前に9つのスペースが追加されます。 9では不十分な場合は、さらに追加します(99や999など)。視覚的に選択して_:
_と入力すると、Vimが自動的に範囲を挿入するため、実際のコマンドは_:'<,'>normal f=9i
_ですが、これらの文字を入力する必要はありません。=
_ sをフラッシュする列に移動します。この場合、2行目は変数名が最も長いため、その名前の終わりの後の2つのスペースに移動します。これは、_=
_ sが最後にあるはずの場所です。これがバッファ全体である場合は、_2G2e2l
_を使用してそこに到達できます。k
で十分です。Ctrl-V
_を押して、ビジュアルブロックの選択を開始します。G
を使用できます。これがファイルの途中である場合は、_4j
_を使用して4行下に移動できます。<
_コマンドを使用して、行を左にシフトできますが、視覚ブロックの左側に到達するまでです。各_<
_はそれらを1つだけ_'shiftwidth'
_シフトするため、複数必要になる可能性があります。したがって、確かに、_9<
_(または、手順2で大量のスペースを追加した場合は、_99<
_、または_999<
_)を使用してください。Voilà!
これはかなりクールなテクニックであり、プラグインが提供できる以上の柔軟性が必要な場合に役立ちます。 Vimツールボックスを学び、それを維持するのは良いことです。
また、_=
_以外の異なる基準に揃える場合、たとえば、各行の3番目の列(3番目のWord)に揃える場合は、手順2で_:normal 2W9i
_を使用します。