vimで新しい行に貼り付ける方法は?


144

私はしばしばvimの新しい行にいくつかのものを貼り付ける必要があります。私がいつもやっていることは:

o<Esc>p

新しい行を挿入して挿入モードにし、挿入モードを終了して貼り付けます。

3つのキーストローク。あまり効率的ではありません。より良いアイデアはありますか?


8
3回のキーストロークは効率的ではありませんか?
2013

60
1または2の方が良いでしょう:)最大限の効率が得られないのに、なぜvimを使用するのですか?
static_rtti

2
また、コピーされたコンテンツが改行で終わっている場合は、余分な改行になります。
ジョナサンW.

1
@gtd通常のエディターは<Enter> <CV>で動作します。2つのキーストローク。
user405205​​4

1
@ user405205​​4いいえ、それは同じことではありません。通常のエディターでは、行のどこにいてもO / Oが機能します。最初に行の最初または最後に移動する必要があります。さらに、行全体をコピーする場合は、行全体を1つのキーストロークだけで挿入できます。これは、コーディングの一般的な命題です。
gtd

回答:


71

:help pそれが言う直後:

:[line]pu[t] [x]    Put the text [from register x] after [line] (default
                    current line).  This always works |linewise|, thus
                    this command can be used to put a yanked block as
                    new lines.

:[line]pu[t]! [x]   Put the text [from register x] before [line]
                    (default current line).

残念ながら、別の回答で提案されているキーボードマップと組み合わせない限り、現在のソリューションよりも短くはありません。たとえば、任意のキーにマッピングできます(もp):

:nmap p :pu<CR>

2
私はそれを知っており、私はそれを使用していますが、あなたがコピーしているものにLFが含まれていない場合があるので、それは私が求めているものではありません。「新しい行に貼り付け」コマンドがあった場合、貼り付けようとしているコンテンツに関係なく機能するので、それについて考える必要はありません。
static_rtti 2009

5
さて、:pu[t]現在の行の後に新しい行に:pu[t]!テキストを置き、現在の行の前に新しい行にテキストを置きます。それに応じて回答を編集します。(Hooray for :help p。)
Bombe

2
私の現在の解決策ほどよくはありませんが、それが私の質問に対する最良の答えだと思います。
static_rtti 09

4
キーストロークの数は同じですが、これはより効率的に感じられます。o <Esc> pは不格好に感じますが、これはそうではありません。
マークストーリー

2
コマンドは、p自体を含む任意のキーにマップできます。:nmap p :pu<CR>それを.vimrcファイルに入れて、すぐに使用できます:)
Capi Etheriel

55

オプション:

1)yy行全体(行末文字を含む)をヤンクするために使用します。 p次に、現在の行の後の新しい行に行を貼り付け、PShift- P)は現在の行の上に貼り付けます。

2)マッピングを作成します。1つまたは2つのキーのみです。

:nmap ,p o<ESC>p
:nmap <F4> o<ESC>p

3)マッピングの関数バージョン(実際には不要ですが、完全にするためにのみ):

:nmap <F4> :call append(line('.'), @")<CR>

" This one may be a little better (strip the ending new-line before pasting)
:nmap <F4> :call append(line('.'), substitute(@", '\n$', '', ''))<CR>

:help let-register
:help :call
:help append()
:help line()
:help nmap

2
さて、私はマッピングを作成すると思います。私は標準的な解決策が存在することを望んでいました:-/ご回答ありがとうございます!
static_rtti 2009

2
@AI: '、p'( '、'は私の<Leader>としてマップされます)を使用するのが私の意見では最良のソリューションです。使いやすい機能も備えています。:) すごい!
だれかがまだMS-DOSを使用しています

30

挿入するバッファ<C-R>の名前に続けて貼り付けることで、挿入モードでバッファを貼り付けることができます。デフォルトのバッファは"なので、次のようにします

o<C-R>"

私は<C-R>"非常に頻繁に使用<C-F>し、それを私のvimrcにバインドしていることがわかりました:

inoremap <C-F> <C-R>"

2
コピーされた行がインデントされなかった場合でも、インデントを正しく保つため、これは素晴らしいことです。
CornSmith、

24

これはまだ3つのキーストロークを使用しますが、Escよりも簡単です。

o<Alt-p>

oを押した後に挿入モードになっているので、Alt修飾子を使用すると、コマンドを使用していない場合と同じように使用できます。


2
新しい行で "d $"を使用して行の内側をカットしたヤンクを試してみると、非常に便利です
セルハットセビケル2017年

申し訳ありませんが、これはインデントを保持せず、代わりに行の先頭に貼り付けられます。
Michael Goldshteyn

誰もがmac(altなし)のためにこの方法を詳しく説明できますか?
Li haonan

@Lihaonanあなたの質問は8ヶ月前からです、うまくいけば、あなたはすでにstackoverflow.com/q/7501092/5407634
m_mlvx

12

このプラグインの使用:https : //github.com/tpope/vim-unimpaired

]pの行に貼り付けます

[p上記の行に貼り付けます

利点:

  • すべてのヤンクテキスト(単語、行、文字など)で機能します
  • 貼り付けたテキストをインデントして、周囲のテキストのインデントと一致させます
  • 3つではなく2つのキーストロークと「より簡単な」ストローク
  • 速い

1
私のお気に入りも。tpope/vim-unimpairedこれが機能するために必要なことを言及する価値があるかもしれません😉。
alextes

1
ああ、それをずっと前にインストールしたので、忘れていました。念押し有難う!
crogers

9

個人的に私は このようにEnter(CR)を nmap ました:

nmap <CR> o<Esc>k

... この Vim Wikiaの記事に基づいています。

このようにして、ノーマルモードから直接改行を作成し、これを以下の改行に貼り付けたいと組み合わせることができます。

<CR>jp

Enterでどの機能を使用するかに応じて、上記のnmapでkをスキップすることもできます。<CR>p

また、jjをEscにマップしました。これもこの場合に役立ちます。Escがvimでどれほど重要であるかについては、ホームローから遠く離れすぎています。

他のソリューションよりも短いわけではありませんが、いくつかのソリューションよりも不格好さは少なく、他の用途もあります。


5

行全体をコピーしてから行全体を貼り付ける場合は、を使用Yして、最初に改行を含む行をヤンクしpて貼り付けます。ビジュアルモードのプレーンとは対照的に、Vビジュアルラインモードであるを使用することもできvます。


3
問題は、単に行全体をコピーしたくない場合があることです... 10行または2語をコピーしたかどうかに関係なく機能する解決策が欲しいのですが。
static_rtti 09

3

マッピングしていinoremap jj <ESC>ます。したがって、ojjand Ojjおよびthenで新しい行を挿入するのは簡単pです。

そのojjp新しいAの改行を貼り付けます。もう1ストロークありますo<esc>pojjp、私にとっては簡単です。


2

私はこれに対するエレガントな解決策を見つけました。あなたのOSのクリップボード(とにかく素晴らしい)にヤンクレジスターを置くなら、

set clipboard+=unnamed

あなたができるよりo<Ctl-v>

ストローク数が少なくなるだけでなく、これによりインデントが保持されるため、両方o<Esc>pで改善され:puます。他のオプションはどちらも、新しい行の文字0から開始します。

警告は、これはOSに依存する場合としない場合があります。私が知っているのは、それがOS Xの最近のバージョンで動作することですが、クリップボードはOSクリップボードにヤンクを入れる多くの方法の1つにすぎません。


1

挿入モードでも終了したい場合は、挿入モードでを使用して貼り付けることができますCTRL-R "https://stackoverflow.com/a/2861909/461834

それでも3つのキーストロークはありますが、エスケープはありません。とにかく挿入で終了する場合は、キーストロークを保存します。


1

私はNeovim構成で次のマッピングを使用します。

nnoremap <leader>p m`o<ESC>p``
nnoremap <leader>P m`O<ESC>p``

少し説明:

  • m`:現在のカーソル位置にマークを設定します。
  • o<Esc>p:下に新しい行を作成し、この行にテキストを貼り付けます
  • O<Esc>P:上に新しい行を作成し、この行にテキストを貼り付けます
  • ``:カーソルを元の位置に置く

:h markVimのマークの詳細については、を参照してください。


1

挿入モードのままにしたい場合は、 o ctrl+o p

  • o –挿入モードで新しい行に移動
  • ctrl+o –通常モードのように単一のコマンドを実行する
  • p –貼り付け

キーストロークは3つですが、挿入モードのままでo ctrl+o非常に高速なので、個人的には2.5キーストロークとして扱います。


0

このソリューションは、コピーされたテキストのブロックが新しい行で始まる場合にのみ適用されるようです(行のどこかでテキストのスニペットを取得するのではなく)。いつでも、取得したい最後の文字からコピーを開始して、ナビゲートできます。目的のコピーブロックの開始前の行末の最後の文字まで。次に、貼り付けたい場合は、テキストを貼り付けたい行の末尾にカーソルを置き、pキーを押します。説明を間違えていなければ、これであなたが探している効果が得られるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.