端末vimでは、クリップボードのデータを貼り付けると、コードのインデントが台無しになることがよくあります。私:set paste
はインデントが壊れていないことを使用するかどうかを知っていました。ただし、データを貼り付けた後、:set nopaste
再度行う必要がありますか?そうしないとどうなりますか?
端末vimでは、クリップボードのデータを貼り付けると、コードのインデントが台無しになることがよくあります。私:set paste
はインデントが壊れていないことを使用するかどうかを知っていました。ただし、データを貼り付けた後、:set nopaste
再度行う必要がありますか?そうしないとどうなりますか?
回答:
他の人が書いたように、「貼り付け」セットを残したくありません。適切なターミナルエミュレータと適切にコンパイルおよび構成されたvim
「貼り付け」を変更する必要がないことを指摘したかっただけです。xtermやGNOMEターミナルなどの優れたターミナルエミュレーター、X11機能を含むvim、および 'a'に設定された 'mouse'オプションが必要です。その後vim
、マウスで貼り付けていることを「認識」し、「貼り付け」オプションを効果的に設定および設定解除します。
vim
X11機能を使用する1つの方法はgvim
、-v
オプションを使用して実行するか、エイリアスを作成することです。
alias vim='gvim -v'
それから
set mouse=a
〜/ .vimrcで。
Copy
テキストが選択されていない限り、グレー表示されるか、まったく表示されません。コピーするテキストをどのように選択していますか?
この投稿には私のお気に入りの答えがあります、https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
基本的に、挿入モードで起動してCtrl + Shift + Vまたはマウスで右クリックペーストを使用すると、Vimはこれがターミナルからのものであることを検出し、ペーストモードを自動的に設定し、一度設定を解除すると、再マップされたキーが失われません(生データを書き込むため、貼り付けモードでは機能しません)、完了したら「正常な」状態に戻ります。
vimのみ(.vimrcに入力)
let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
Tmuxでvimを使用する場合(まだ.vimrcになります)
function! WrapForTmux(s)
if !exists('$TMUX')
return a:s
endif
let tmux_start = "\<Esc>Ptmux;"
let tmux_end = "\<Esc>\\"
return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction
let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")
function! XTermPasteBegin()
set pastetoggle=<Esc>[201~
set paste
return ""
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
let &t_SI .= "\<Esc>[?xxxxx"
行の1つがキーボードペーストのショートカットを検出していると思いますか?別のショートカットがあれば、これはMacでも動作しますか?
IIRCは、vimに貼り付けると、本質的にすべての文字を自分で入力したと考えます。したがって、自動インデントがオンになっている場合、インデントは自動的に行われますが、通常、貼り付けられたテキストには既にインデントが含まれているため、インデントは実際に「めちゃくちゃ」になります。貼り付けモードに切り替えると、自動インデントなどがオフになります。
入力時に自動インデントが必要な場合は、貼り付けが完了したらnopasteに戻す必要があります。それを試して、貼り付けモードですべてのインデントを手動で行う方法に注意してください。