Di Vim, jika saya tempel skrip ini:
#!/bin/sh
VAR=1
while ((VAR < 10))
do
echo "VAR1 is now $VAR"
((VAR = VAR +2))
done
echo "finish"
Saya mendapatkan hasil aneh ini:
#!/bin/sh
#VAR=1
#while ((VAR < 10))
# do
# echo "VAR1 is now $VAR"
# ((VAR = VAR +2))
# done
# echo "finish"
#
Tanda hash (#) dan tab telah muncul. Mengapa?
vim
clipboard
whitespace
elbarna
sumber
sumber
Jawaban:
Ada dua alasan:
Untuk menempel di
vim
saat indentasi diaktifkan, Anda harus mengubah ke mode tempel dengan mengetik:Kemudian Anda dapat mengubah untuk memasukkan mode dan menempelkan kode Anda. Setelah menempel, ketikkan:
untuk mematikan mode tempel. Karena ini adalah tindakan umum dan sering,
vim
menawarkan mode tempel tempel:Anda dapat mengubah
F2
ke tombol apa pun yang Anda inginkan, dan sekarang Anda dapat menghidupkan dan mematikan tempel dengan mudah.Untuk mematikan penyisipan komentar secara otomatis, Anda dapat menambahkan baris ini ke vimrc Anda :
vim
juga menyediakan register tempel bagi Anda untuk menempelkan teks dari clipboard sistem. Anda dapat menggunakan"*p
atau"+p
bergantung pada sistem Anda. Pada sistem tanpa X11, seperti OSX atau Windows, Anda harus menggunakan*
register. Pada sistem X11, seperti Linux, Anda dapat menggunakan keduanya.Bacaan lebih lanjut
sumber
set paste
tidak boleh ada di vimrc Anda. Ini menonaktifkan atau me-reset banyak hal, termasuk pemetaan mode insert, pemetaan baris perintah, singkatan, lebar pita, wrapmargin, autoindent, smartindent, softtabstop, formatoptions, indentexpr, dan beberapa lainnya.:h paste
memiliki seluruh daftar. Kebanyakan orang menggunakan beberapa atau semua hal ini dan bertanya-tanya mengapa pengaturan di sana diabaikan.:r!cat
untuk menempelkan kata demi kata.set mouse
, yang secara otomatis dapat masuk dan keluar dari mode tempel ketika menempel dengan klik mouse.Gunakan tempel vim. Yang Anda inginkan adalah menempelkan apa yang ada di buffer clipboard "+p
Ini memilih
+
dan menempelkannya di tempatnya.Jika Anda menggunakan Linux,
*
adalah buffer X / klik tengah (teks yang dipilih terakhir).Lalu vim tahu itu pasta.
Kalau tidak vim mengira Anda telah mengetik kunci yang ditempelkan dan melakukan indentasi sendiri (di atas lekukan yang Anda salin) sampai ke akhir tempel.
Sebagai catatan agar ini dapat berfungsi pada SSH, Anda perlu mengatur opsi untuk clipboard Anda untuk dibagikan
-Y
Lihat
man ssh
untuk lebih jelasnya.sumber
gvim
); vim berjalan dalam emulator terminal menempelkan teks yang terakhir dihapus dengan "* p, bukan pilihan saat ini.set mouse?
vim --version
apakah melihat apakah itu dikompilasi dengan dukungan clipboard+xterm_clipboard
harus dalam outputunnamed
string.Tab dimasukkan karena Anda telah mengaktifkan otomatis dan Anda dapat menonaktifkan perilaku itu dengan mematikan autoindent (
:set noai
) sebelum Anda menempel ke terminal.Baris yang dikomentari dihasilkan oleh komentar otomatis dan dapat dinonaktifkan dengan mematikannya.
Alternatif bagi mereka, Anda harus mendapatkan perilaku yang diinginkan menggunakan toggle
:set paste
, menempelkan kode yang diformat dan:set nopaste
untuk mengembalikan perilaku normal.sumber