新しい行ごとに自動インデントなしで新しいテキストをコピー/貼り付けるにはどうすればよいですか?


7

今貼り付ける方法:

  1. 右クリック/コピーするか、単に強調表示します。
  2. 右クリック/貼り付けまたは中クリックまたはCTRL + SHFT + V
  3. インデントは次の間隔で表示されます:0、2、4、6、+

手元の質問:

以前の調査から、迅速で汚い解決策が.vimrcファイルに次のように入力されていることがわかりましたset paste。ただし、そのコマンドを提案した人たちは、それset pasteが他の設定に影響を与えると述べました。(頭のてっぺんから、忘れてしまいます。)

余分なインデントなしで貼り付けることができるオプションを設定したいのですが。それがになる場合、'paste'そのコマンドが正確に何をするのか知りたいです。

違いは1つだけです。ときはVimの中で、-- INSERT --となり-- INSERT (paste) --


挿入モードで貼り付けていますか?ノーマルモードでは]p、インデントを正しく貼り付けて調整するで貼り付けない限り、常にヤンクテキストのようにインデントを取得します。
ゴンサロリベイロ

回答:


11

はい、ここに「ヤンク&プット」のプライマーがあります…

Vimでは、ヤンク(コピー)と配置(貼り付け)の主なコマンドはyand pです。

ヤンキングは、ヤンクしたテキストをレジスタに配置します。そのレジスターは"デフォルトでは名前のないレジスターですが、他のレジスターを使用することもできます:

"ay    " yank into register a
"by    " yank into register b
"+y    " yank into clipboard register
[…]

同様に、putはレジスターからテキストを挿入します。そのレジスターはデフォルトでは名前のないレジスターですが、他のレジスターを使用することができます:

"ap    " put from register a
"+p    " put from clipboard register
"3p    " put from the register 3
[…]

これらのコマンドは、テキストが特別な処理なしでバッファーに「入れられる」ため、「右クリック/貼り付けまたは中クリックまたはCTRL + SHFT + V」よりも優先されます。「右クリック/貼り付けまたは中クリックまたはCTRL + SHFT + V」を使用すると、テキストは入力したかのようにバッファーに挿入され、自動インデント/フォーマットが適用されます。

"+pまたは、"*pX転送なしのSSHまたはクリップボードサポートなしでビルドされたVimを使用して作業できない場合、このpasteオプションは自動インデントを無効にし、他の非常に便利なオプションをいくつか入力して、入力したテキストが認識されないようにします。

で説明したよう:help 'pasteに、オプションには潜在的に非常に悪い副作用があるため、テキストを貼り付けた直後に無効にすることが重要です。

:set paste
(paste)
:set nopaste

そのダンスは明らかにお尻の痛みなので、切り替え用の特別なショートカットを定義できる別のオプションがありますpaste

set pastetoggle=<F12>

それは少し痛みを軽減します:

<F12>
(paste)
<F12>

しかし、それはまだ苦痛です。

可能であれば、クリップボードをサポートする適切なVimをインストールして、"*pまたは"+p(テキストのコピー方法に応じて)を使用してテキストを正しい方法で貼り付けることをお勧めします。

  • Mac OS Xの場合:MacVimをインストールします。
  • Debianベースのシステムの場合:vim-gnomeまたはvim-gtkパッケージをインストールします。
  • CentOSの場合:vim-enhancedパッケージをインストールします。

参照:

:help p
:help y
:help registers
:help 'paste'
:help 'pastetoggle'

1
理由を説明せずに「正しい方法」として説明したり、反例を提供したりしても役に立たない。
alxndr 2015

1
@alxndrに同意します。まず、私はUbuntuを持っていません。それは私の質問で述べられています。第二に、の使用方法に関するコンテキストはありません"*p。表示モードで入力しますか?または.vimrc
onebree 2015

@onebreeはのようなものpですが、OSクリップボードから貼り付けるためのものです。vi.stackexchange.com/q/84/205を
muru

その場合は、回答でそれを定義してください。
onebree 2015


7

VIMにはpastetoggle、貼り付けモードを切り替えるためのマッピングを定義する別の設定があります。それがあなたがやりたいことであり、あなたは単に貼り付けモードを有効にしてから貼り付けることができます。

私はそれが少し直感的では]pなく、コードを貼り付ける方法として、p


6

かなり最近のターミナルエミュレータを使用している場合は、vim-bracketed-pasteプラグインをインストールできます

ドキュメントから:

xterm、urxvt、iTerm2、gnome-terminal(およびlibvteを使用するその他の端末)は動作することがわかっています。

インストール後、挿入モードで通常どおりに貼り付けるだけで、貼り付けの設定と設定解除が自動的に行われます。


私はGNOMEターミナル3.8.4です
onebree

これでうまくいくはずです。Gnome Terminalは、しばらくの間、括弧付きの貼り付けをサポートしています。
Jay Thompson

別のプラグインオプション:Vimの-unimapiredは提供yo/ yOオペレーターその模倣oOオペレーターだけset paste挿入モードが終了するまで。
Peter Rincker、2015

3

自動インデントなしでテキストをvimに貼り付けるには、Vimを貼り付けモードにする必要があります。これは、1つのウィンドウからテキストを切り取りまたはコピーして、Vimに貼り付ける場合に便利です。これにより、予期しない影響が回避されます。詳細については、参照:help pasteしてください。

作業を簡単にするためにpastetoggle、「貼り付け」オプションを切り替えるキーシーケンスを指定する変数があります(:set invpaste)。

たとえばF2、Xでターミナルに貼り付けた場合に使用して自動インデントを無効にする場合は、.vimrcファイルに次のコードを使用できます。

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>

1

Unimpaired.vimは、私が見た最も効率的な方法でこの問題を解決します。'paste'有効になっている状態で挿入モードに入るマッピングがいくつか提供され、通常モードに戻ると自動的に無効になります。yoカーソルの下に新しい行を開きます。yO上記。(ちょうどのようoO。)

プラグインは、リストのナビゲート、一般的な設定の変更、およびいくつかの気の利いたテキスト変換のための他の便利なマッピングのスイートも提供します。マッピングは模範的なものです。既存の機能を踏襲することなく、Vimのネイティブのように感じます。

多くの人はプラグインをインストールして問題を解決するのをためらうので、前の段落で詳細を説明します。ただし、Unimpaired.vimが提供する他の(無関係の)ものに満足していると思います。


1

設定を変更できない、または変更したくないサーバーまたはシステムを使用している場合、最も簡単な方法は

:i!

これにより、自動インデントがオフになっている挿入モードになり、テキストを貼り付けることができます。終了したら、入力する必要があります

.

独自の行で挿入を終了します。

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