Pertanyaan Mematikan indentasi otomatis saat menempelkan teks ke vim


Saya berusaha untuk mempelajari Vim.

Ketika saya menempelkan kode ke dokumen saya dari clipboard, saya mendapat ruang tambahan di awal setiap baris baru:

line
  line
    line

Saya tahu Anda dapat mematikan indentasi otomatis tetapi saya tidak bisa membuatnya berfungsi karena saya memiliki beberapa pengaturan lain yang bertentangan atau sesuatu (yang terlihat cukup jelas di .vimrc saya tetapi tidak menjadi masalah ketika saya mengeluarkannya).

Bagaimana cara mematikan indentasi otomatis ketika saya menempelkan kode tetapi masih memiliki auto auto indent ketika saya menulis kode? Ini aku .vimrc mengajukan:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

955
2018-03-25 09:52


asal


Jawaban:


Untuk mematikan autoindent saat Anda menempelkan kode, ada mode "tempel" khusus.

Mengetik

:set paste

Kemudian tempel kode Anda. Perhatikan bahwa teks dalam keterangan alat sekarang mengatakan -- INSERT (paste) --.

Setelah Anda menempelkan kode Anda, matikan mode-tempel, sehingga indentasi otomatis saat Anda mengetik kembali berfungsi dengan benar.

:set nopaste

Namun, saya selalu menemukan itu rumit. Itu sebabnya saya memetakan <F3> sedemikian rupa sehingga dapat beralih antara mode pasta dan nopaste saat mengedit teks!  Saya menambahkan ini .vimrc

set pastetoggle=<F3>

1688
2018-03-25 10:02



Untuk menghindari efek yang tidak diinginkan saat menempel, ada opsi yang perlu diatur:

set paste

Perintah yang berguna untuk dimiliki di .vimrc Anda set pastetoggle=<F10> atau beberapa tombol lain, untuk dengan mudah beralih antara tempel dan nopaste.


247
2018-03-25 10:15



Saya biasanya menggunakan :r! cat lalu tempelkan ( shift + insert ) konten, dan CTRL+D.

Tidak perlu mengaktifkan & menonaktifkan, penggunaan langsung.


120
2018-03-30 12:50



Jika Anda bekerja secara lokal, Anda dapat menempelkan dari papan klip sistem dengan urutan kunci:

"+p

Ini adalah perintah vim yang tepat, jadi tidak perlu khawatir tentang memasukkan mode insert atau mematikan autoindent terlebih dahulu.

Tentu saja jika Anda bekerja dari jarak jauh (konsol melalui SSH, misalnya) maka ini tidak akan berfungsi dan Anda harus pergi :set noai, masukkan mode, tempelkan ke konsol, biarkan insertmode, :set ai rute seperti yang dijelaskan di tempat lain.


77
2017-11-05 07:45



Pengguna Mac dapat menghindari pemformatan otomatis dengan membaca langsung dari papan dengan:

:r !pbpaste

35
2017-08-28 12:58



Ini sebuah pos oleh seseorang yang menemukan cara memetakan kembali acara tempel untuk secara otomatis mengaktifkan mode tempel dan kemudian mundur. Bekerja untuk saya di tmux / iTerm di MacOSX.


18
2018-02-08 20:30



Tambahkan ini ke Anda ~/.vimrc dan Anda hanya perlu menekan F2 sebelum dan sesudah menempel:

set pastetoggle=<F2>

12
2018-03-22 17:27



Saat mengatur mode tempel dengan paste/nopaste/pastetoggle baik-baik saja, Anda masih harus secara manual mengaktifkan mode pasta sebelum menempel dan menonaktifkan mode pasta setelah menempel. Menjadi orang yang malas bahwa saya, di bawah ini adalah solusi terbaik yang saya temukan sejauh ini, yang secara otomatis mengubah mode tempel saat Anda tempel.

Berikut ini sedikit trik yang menggunakan mode kurung kurung terminal   secara otomatis mengatur / unset mode pasta Vim ketika Anda menempel. Masukan berikut   di .vimrc Anda:

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

Sekarang Anda dapat menempel tanpa secara eksplisit mengubah mode pasta on / off - itu   ditangani secara otomatis untuk Anda.

Sumber: Coderwall


12
2017-07-08 04:00



Saya hanya menempatkan set clipboard=unnamed di .vimrc saya. Itu membuat peta buffer pasta default ke clipboard X.

Jadi, jika saya menandai sedikit teks di terminal, saya cukup tekan puntuk menempelkannya di vim. Demikian pula, saya dapat mencabut hal-hal dalam vim (mis. YY untuk mencabut baris saat ini ke buffer) dan klik tengah di sembarang jendela untuk menempelkannya.

Tidak tahu. Saya merasa sangat nyaman.


9
2018-01-20 11:15