どうすれば簡単に行を移動できますか?


47

vimで行を上下に移動するコマンド(またはショートカット)とは何ですか?私の現在のワークフローは、行をヤンク(コピー)し、その行を削除してから、その行を配置(貼り付け)することです。


8
実際にカットを削除するので、あなたはヤンクをスキップすることができますddkP、下に移動することは簡単です:ddp
ムル

回答:


52

まず、ヤンクして削除する必要はありません。後者は、削除されたコンテンツを(デフォルトまたは指定された)レジスタに入れます。したがって、ddp/ ddkPは、行を1つ下/上に移動する一般的なコマンドです。

あるいは、:moveコマンド、つまり:move +1/を使用できます:move -2。これはレジスタを上書きせず、範囲全体を移動することもできます。キーマッピングを簡単に定義して、これを短縮できます。

(多くの場合、それらが付属していること、および追加の快適さ)あなたがプラグインを気にしない場合は、両方のティム教皇の障害のないプラグインと私のLineJugglerプラグインが提供]e/ [eマッピングが行(およびいくつかのより多く移動するには、さまざまな用途のためにティムさんが、鉱山は取り扱いに焦点を当てました行)。


36

最も簡単なのは、:m+またはIngoが示唆したとおりの:m-2略語です:move

または、視覚モード(V)を使用して、行(d/ x)を切り取り、貼り付ける前にカーソルを正しい場所に移動した後(p-カーソルの下、カーソルのP上)に貼り付けます(要約するとVxp/になりますVdp)。

ビジュアルモードで複数の行を移動する場合は、:m '>+1(1行下に移動する)または:m '<-2(1行上に移動する)を使用する必要があります。


便利なマッピングのサンプル(Shift+ ↑/ Shift+↓)は次のとおりです。

nnoremap <S-Up> :m-2<CR>
nnoremap <S-Down> :m+<CR>
inoremap <S-Up> <Esc>:m-2<CR>
inoremap <S-Down> <Esc>:m+<CR>

Sublime Text(Win / OSX)に似ています。

以下はvim wikiaで提案されたものです

nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv

通常モードまたは挿入モードでは、Alt-jを押して現在の行を下に移動するか、Alt-kを押して現在の行を上に移動します。

行のブロックを視覚的に選択した後(たとえば、Vを押してからカーソルを下に移動)、Alt-jを押してブロック全体を下に移動するか、Alt-kを押してブロックを上に移動します。

こちらもご覧ください:


2
Vim wikiaリンクの+1。そこでいくつかのことを学びました。
ゴンサロリベイロ

理由はわかりませんが、Gvimではうまく機能しますが、ターミナルvimでは期待どおりに機能しません。(tmuxの問題のようです)
CodyChan

11

1行を上の行と入れ替えたい場合は、通常次のようにします

ddkP

説明

  • ddは行を削除し、デフォルトのレジスタに追加します。
  • kは行を上に移動します(jは行を下に移動します)
  • Pは現在の行の上に貼り付けます

3
現在の行を下に移動するには、次を使用しますddp
-Qinjie

4

FWIW、これは私が長年使ってきたものです。インデントを自動的に調整しながら、通常モードでは現在の行を上下に移動し、ビジュアルモードでは選択を移動します。

nnoremap ,<Up>   :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up>   :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.