もた日記

くだらないことを真面目にやる

Vimメモ : splitjoin.vimで1行表記、複数行表記を切り替える

splitjoin.vim


github.com

このプラグインを使うと、例えばRubyで以下のように1行で書いていたコードを

puts "foo" if bar?

以下のような複数行の書き方へ簡単に切り替えることができる(逆の切り替えも可能)。

if bar?
  puts "foo"
end


インストール


NeoBundleの場合は下記行をvimrcに追加。

NeoBundle 'AndrewRadev/splitjoin.vim'


使い方


デフォルトでは以下のキー操作で切り替えが可能。

  • gS : 1行→複数行
  • gJ : 複数行→1行(カーソルはブロックの先頭行に置いて実行)

キーマッピングを変更したい場合は以下のような設定をvimrcに追加。

let g:splitjoin_split_mapping = ''
let g:splitjoin_join_mapping = ''

nmap <Leader>j :SplitjoinJoin<cr>
nmap <Leader>s :SplitjoinSplit<cr>


切り替え例


切り替え可能な対象は下記とのこと。

  • Various constructs in Ruby and Eruby
  • Various constructs in Coffeescript
  • Various constructs in Perl
  • Various constructs in Python
  • PHP arrays
  • Javascript object literals and functions
  • Tags in HTML/XML
  • CSS, SCSS, LESS style declarations.
  • YAML arrays and maps
  • Lua functions and tables
  • Go structs
  • Vimscript line continuations
  • TeX blocks
  • C if clauses and function calls
  • Do-blocks in Elixir

詳細は:help splitjoin-rubyのようにsplitjoin-の後に言語を指定してヘルプを開けば確認できる。その他、このページに各言語のテストファイルがあるので実際に試しながら確認できる。
Rubyの例としては、

foo = { :bar => 'baz', :one => 'two' }

foo = {
  :bar => 'baz',
  :one => 'two'
}
Bar.new { |b| puts b.to_s }

Bar.new do |b|
  puts b.to_s
end
params.permit(:title, :action, :subject_type, :subject_id, :own)

params.permit(:title,
              :action,
              :subject_type,
              :subject_id,
              :own)

# with splitjoin_ruby_hanging_args == 0

params.permit(
  :title,
  :action,
  :subject_type,
  :subject_id,
  :own
)

のような切り替えが可能。