vim-users.jp

Hack #223: テキストを直感的に移動、複製する

Posted at 2011/07/18
このエントリーをはてなブックマークに追加

textmanip.vim を使えば、選択したテキストブロックを、直感的に移動、複製する事ができるようになります。

と書いても、「よくわからない」という反応が殆どだと思いますので、動画を用意してみました。

Youtube: textmanip.vim

インストール

textmanip.vim は vim.org や、github から入手可能です。

また Vundle でもインストール可能です。

:BundleInstall t9md/vim-textmanip

設定

textmanip.vim はデフォルトのキーマップを自動で設定しませんのでユーザーが設定する必要があります。
筆者オススメのキーマップは下記です。vimrc に設定します。

" 選択したテキストの移動
vmap <C-j> <Plug>(Textmanip.move_selection_down)
vmap <C-k> <Plug>(Textmanip.move_selection_up)
vmap <C-h> <Plug>(Textmanip.move_selection_left)
vmap <C-l> <Plug>(Textmanip.move_selection_right)

" 行の複製
vmap <M-d> <Plug>(Textmanip.duplicate_selection_v)
nmap <M-d> <Plug>(Textmanip.duplicate_selection_n)

その後なんでもいいので、テキストをビジュアルモードで選択し、コントロールキーを押したまま, hjlk を入力してみて下さい。

モノのように移動できましたよね?楽ですよね?便利ですよね?

<M-d> を押すと、選択したテキストが下方向に複製されます。
ノーマルモードで <M-d> を入力すると、カーソルのある行が複製されます。
<M-d>Altキー を押しながら d です。
Mac ユーザーの人は D-d として、 COMMANDキー を押しながら d に設定するといいかもしれません。

※ 本当は C-d を使いたかったのですが、ノーマルモードでの半ページスクロールとキーが被ってしまいます。
※ ビジュアルモードのみ vmap <C-d> <Plug>(Textmanip.duplicate_selection_v) と設定するのも一つの手です。

ユースケース1

Markdown では整形済みテキスト(preブロック)をインデントで表現しますので、複数行をインデントする事がよくあります。

インデントしたいテキストを選択して、<C-l>を数回押して、右にずらします。

ユースケース2

メソッド or 関数を別の引数で複数回呼び出すコードを書く場合を考えます。
例えば次のような関数呼出しがあり、

some_method("a", 1000)

下記のように引数を変えて複数回呼び出したいとします。

some_method("a", 1000)
some_method("b", 2000)
some_method("c", 3000)

まず、some_method("a", 1000)の行にカーソルを合わせます。
<M-d>を2回押して、行を複製します。
あとは引数を微修正すれば完了です。

t9md

もどる
blog comments powered by Disqus