web-dev-qa-db-ja.com

vimに貼り付けるときに、コードを元のソースとしてフォーマットしておくにはどうすればよいですか?

WebページからコードをコピーしてVIMに貼り付けると、次のようにラダーのような混乱したスタイルになります。

xxxxxx
   xxxxxx
      xxxxxx
         xxxxxxxxxx

定期的にめちゃくちゃになっているので、.vimrcに問題があるのではないかと思います。

set number
set nocompatible
set nowritebackup
set noswapfile
syntax on
filetype indent on
filetype plugin on
filetype on
set background=light
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions=T
set fileencodings=utf-8,prc
set ruler
set incsearch
map gs :%s
set t_Co=256
:colorscheme evening
filetype plugin indent on

通常、私はpythonをVIMで記述します。そして、助けていただければ幸いです。

39
SpawnST

前にこれを行います:

:set paste

後で:

:set nopaste

http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

コード貼り付けの自動インデントを切り替えます

背景

Vimコマンドを使用してテキストを貼り付けても、予期しないことは起こりません。この問題は、別のアプリケーションから貼り付けた場合、およびVimのGUIバージョンを使用していない場合にのみ発生します。 Vimのコンソールまたはターミナルバージョンでは、別のアプリケーションからテキストを貼り付けるための標準的な手順はありません。代わりに、ターミナルはテキストをキーボードバッファーに挿入することで貼り付けをエミュレートする場合があるため、Vimはユーザーがテキストを入力したと見なします。各行が終了すると、Vimはカーソルを移動して、次の行が最後の行と同じインデントで始まるようにします。ただし、これにより、貼り付けたテキストのインデントが変更されます。

貼り付けトグル

以下をvimrcに入れてください(好きなキーに変更してください):

set pastetoggle=<F2>

別のアプリケーションから貼り付けるには:

  • 挿入モードを開始します。
  • F2キーを押します(「貼り付け」オプションをオンに切り替えます)。
  • 端末を使用して、クリップボードからテキストを貼り付けます。
  • F2キーを押します(「貼り付け」オプションをオフに切り替えます)。

次に、貼り付けたテキストの既存のインデントが保持されます。

最初に挿入モードを開始する必要はありませんが、通常モードでF2のマッピングがある場合、そのマッピングが適用され、 'pastetoggle'機能は動作しません。

一部の人々は、vimrcの以下の代替案によってステータス行に表示される視覚的なフィードバックを好みます:

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

最初の行はマッピングを設定するため、通常モードでF2を押すと「貼り付け」オプションが反転し、そのオプションの値が表示されます。 2行目では、挿入モードのときにF2キーを押して、「貼り付け」のオンとオフを切り替えることができます。 3行目では、挿入モードで「貼り付け」がオンになっているかどうかを表示できます。

16
aXqd

混乱しているのは自動インデントです。

set autoindent
set smartindent

コードをカットアンドペーストするときにそれらを無効にして、完了したら再度有効にしてください。

2
Johan