Jika Anda ingin berkomentar khusus bahasa, Anda memerlukan plugin seperti nerdcommenter .
Atau, meskipun itu tidak menjawab pertanyaan Anda yang sebenarnya, Anda dapat menggunakan tindakan builtin vim dan pengetahuan Anda tentang karakter komentar masing-masing bahasa ...
Opsi # 1: Blok-V
:1
Enter (Lanjutkan ke baris 1)
- Ctrl-V (mode V-Block)
jjj
(Turun 3 baris lagi)
- Shift-I (Masuk ke mode insert sebelum blok)
#
(Sisipkan '#')
- Esc (Kembali ke mode normal)
Opsi # 2: Pergantian
:1,4s/^/#/
Kerusakan:
:
Perintah Ex berikut
1,4
pada garis dari 1 hingga 4
s
pengganti
/
pemisah untuk potongan-potongan perintah substitusi.
(Anda juga dapat menggunakan karakter yang berbeda, misalnya :
)
^
mulai dari garis
/
pemisah
#
karakter komentar untuk python
/
pemisah akhir
Opsi # 3: Ulangi aplikasi makro ( sumber )
:1
Enter (Lanjutkan ke baris 1)
qa
(Mulai merekam saat mendaftar a
)
- Shift-I (Masuk ke mode insert di awal baris
#
(Tambahkan '#' di awal baris)
- Esc (Kembali ke mode normal)
q
(Berhenti merekam)
:2,4 normal @a
(jalankan kembali makro yang direkam untuk mendaftar a
di jalur antara 2 dan 4)
ATAU
Anda dapat memilih garis dalam mode visual dan tekan :
untuk secara otomatis mengisi baris Ex dengan :'<,'>
(rentang dari awal hingga akhir pemilihan visual) kemudian ketik normal @a
dan tekan Enter( sumber ).
Sekarang, setiap kali Anda ingin mengomentari beberapa baris, jalankan kembali makro yang direkam untuk mendaftar a
pada baris-baris itu:
:9,22 normal @a (comment out lines 9-22)
:9,22 normal I#
sesuai jawaban saya.normal
perintah sebelum menulis jawaban ini. Kamu benar;:9,22 normal I#
akan bekerja juga.Menggunakan mode Blok Visual ( CtrlV), pilih awal garis. Lalu tekan I#(itu huruf kapital
I
) untuk memasukkan karakter hash pada setiap baris tersebut. Kemudian tekan Escuntuk kembali dari Sisipkan Mode ke Mode Normal.sumber
ctrl
? Karenactrl+v
itu hal yang berbeda dari adilv
.I
. Ketika saya menekanI
, maka#
akan ditempatkan hanya di depan baris pertama.Esc
setelah prosedur yang dijelaskan.Esc
pada akhirnya.Jika Anda hanya memerlukan solusi cepat untuk bahasa apa pun yang Anda gunakan saat ini, dan Anda sudah memilih teks dalam mode visual, maka
melakukan pekerjaan. (Untuk setiap baris, dalam mode normal, buka kolom pertama dan masukkan
#
. Menggunakan:norm I#
akan memasukkannya sebelum karakter non-spasi pertama, yang mungkin bukan yang Anda inginkan.) Menggunakan:norm i#
juga akan berfungsi, karena:norm
dimulai pada awal dari baris, tetapi kurang eksplisit dan kurang jelas jika Anda tidak tahu itu.Tentu saja, jika Anda sering melakukan ini, Anda ingin mengatur pemetaan atau mencari plugin.
sumber
normal
perintah dijalankan dengan kursor pada awal baris.Melakukannya secara otomatis akan mengharuskan Anda untuk menambahkan sesuatu seperti berikut ini ke
vimrc
file Anda ( sumber ):Menggunakan ,cuntuk mengomentari suatu wilayah dan ,umembatalkan komentar suatu daerah. Ini secara manual menetapkan simbol komentar untuk berbagai bahasa.
Opsi kedua adalah menggunakan plugin seperti tcomment , vim-commentary atau comments.vim . Saya menggunakan tcomment sendiri. Tolong, baca instruksi tentang penggunaan dan instalasi di halaman mereka, karena saya percaya itu di luar topik pertanyaan.
Saya sarankan Anda menggunakan plugin (salah satu yang ditautkan di atas atau yang lain) karena itu jauh lebih mudah daripada mempertahankan sepotong kode di
vimrc
file Anda .Sunting: Saya menghapus cara manual karena pertanyaannya diubah dan juga cara yang benar dijawab oleh 200_success.
sumber
//
(hanya/* */
).:s
perintah yang ditunjukkan dalam kutipan dalam jawaban. Cek itu sendiri akan sepertigetline('.') =~ "^" . escape(b:comment_leader, '\/')
. Jika itu benar tanda komentar, sebaliknya komentar. Ini tidak diuji dan hanya berfungsi sebagai contoh.Saya menggunakan scrooloose / nerdcommenter untuk ini.
Dengan plugin ini, Anda dapat secara visual memilih baris dan tekan leader+ cuntuk mengganti komentar. Tergantung pada jenis file itu akan menggunakan simbol yang berbeda untuk berkomentar.
sumber
Setelah Anda memilih garis, cukup ketik
:
akan secara otomatis memakai'<,'>
baris perintah Anda, yang merupakan rentang dari awal pilihan Anda hingga akhir;norm
mengeksekusi perintah mode normal, dan akan bertindak pada rentang itu;I#
adalah perintah mode normal yang memasukkan '#' di awal baris.sumber
Saya penggemar TComment untuk ini; saya tidak hanya dapat melakukan gaya komentar spesifik tipe file, tetapi bahkan menentukan blok vs per-baris untuk bahasa yang mendukung komentar blok.
sumber
Saya menemukan plugin vim-commentary sejauh ini merupakan cara termudah untuk melakukan ini. Pilih rentang garis, lalu tekan saja gc. Ini akan menggunakan karakter komentar yang sesuai untuk tipe file yang Anda buka. Bahkan mungkin tanpa pemilihan visual untuk menghilangkan komentar pada baris komentar yang berdekatan dengan gcuatau gcgc.
sumber
Dengan asumsi Anda ingin menambahkan awalan ke 5 baris di awal baris, maka Anda dapat menggunakannya Cari dan ganti :
atau di akhir baris:
Atau gunakan mode visual ( Ctrl+v ) untuk memilih blok teks vertikal, lalu masukkan mode sisipkan ( I) dan ketik sesuatu dan tekan Escuntuk mengonfirmasi dan menerapkan perubahan ke baris lain.
Terkait:
sumber
Jawaban ini ada di sini untuk 1) menunjukkan kode yang benar untuk ditempelkan ke
.vimrc
untukvim 7.4+
melakukan blok komentar / komentar sambil menjaga tingkat lekukan dengan 1 pintasan dalam mode visual dan 2) untuk menjelaskannya.Ini kodenya:
Bagaimana itu bekerja:
let b:commentChar='//'
: Ini menciptakan variabel dalam vim. dib
sini merujuk pada ruang lingkup, yang dalam hal ini terkandung ke buffer, yang berarti file yang sedang dibuka. Karakter komentar Anda adalah string dan perlu dibungkus dengan tanda kutip, tanda kutip itu bukan bagian dari apa yang akan diganti ketika bertukar komentar.autocmd BufNewFile,BufReadPost *...
: Perintah otomatis memicu pada hal-hal yang berbeda, dalam hal ini, ini memicu ketika file baru atau file yang dibaca berakhir dengan ekstensi tertentu. Setelah dipicu, jalankan perintah berikut, yang memungkinkan kita untuk mengubahcommentChar
tergantung pada tipe file. Ada cara lain untuk melakukan ini, tetapi mereka lebih membingungkan bagi pemula (seperti saya).function! Docomment()
: Fungsi dideklarasikan dengan mulaifunction
dan diakhiri denganendfunction
. Fungsi harus dimulai dengan modal. itu!
memastikan bahwa fungsi ini menimpa setiap fungsi sebelumnya yang didefinisikanDocomment()
dengan versi iniDocomment()
. Tanpa itu!
, saya punya kesalahan, tapi itu mungkin karena saya mendefinisikan fungsi baru melalui baris perintah vim.execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
: Jalankan panggilan perintah. Dalam hal ini, kami mengeksekusisubstitute
, yang dapat mengambil rentang (secara default ini adalah baris saat ini) seperti%
untuk seluruh buffer atau'<,'>
untuk bagian yang disorot.^\s*
adalah regex untuk mencocokkan awal baris diikuti oleh jumlah spasi, yang kemudian ditambahkan ke (karena&
). Di.
sini digunakan untuk penggabungan string, karenaescape()
tidak dapat dibungkus dengan tanda kutip.escape()
memungkinkan Anda untuk keluar dari karaktercommentChar
yang cocok dengan argumen (dalam hal ini,\
dan/
) dengan menambahkannya dengan a\
. Setelah ini, kami menyatukan lagi dengan ujungsubstitute
string kami , yang memilikie
bendera. Bendera ini memungkinkan kami gagal secara diam-diam, artinya jika kami tidak menemukan kecocokan pada baris yang diberikan, kami tidak akan berteriak tentang hal itu. Secara keseluruhan, baris ini memungkinkan kita menempatkan karakter komentar diikuti oleh spasi tepat sebelum teks pertama, yang berarti kita menjaga tingkat lekukan kita.execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
: Ini mirip dengan perintah besar terakhir kami. Unik untuk yang satu ini, kami punya\v
, yang memastikan bahwa kami tidak harus melarikan diri dari kami()
, dan1
, yang mengacu pada grup yang kami buat dengan kami()
. Pada dasarnya, kami mencocokkan garis yang dimulai dengan jumlah spasi putih apa pun dan kemudian karakter komentar kami diikuti oleh jumlah spasi putih apa pun, dan kami hanya menyimpan set spasi putih pertama. Sekali lagi,e
mari kita gagal secara diam-diam jika kita tidak memiliki karakter komentar di baris itu.let l:line=getpos("'<")[1]
: ini menetapkan variabel seperti yang kami lakukan dengan karakter komentar kami, tetapil
merujuk ke lingkup lokal (lokal ke fungsi ini).getpos()
mendapat posisi, dalam hal ini, awal dari penyorotan kami, dan[1]
sarana kami hanya peduli dengan nomor baris, bukan hal-hal lain seperti nomor kolom.if match(getline(l:line), '^\s*'.b:commentChar)>-1
: Anda tahu caraif
kerjanya.match()
memeriksa apakah hal pertama berisi hal kedua, jadi kami mengambil garis yang kami mulai sorot kami, dan memeriksa apakah itu dimulai dengan spasi putih diikuti oleh karakter komentar kami.match()
mengembalikan indeks di mana ini benar, dan-1
jika tidak ada kecocokan yang ditemukan. Karenaif
mengevaluasi semua angka bukan nol menjadi benar, kita harus membandingkan output kita untuk melihat apakah itu lebih besar dari -1. Perbandingan dalamvim
pengembalian 0 jika salah dan 1 jika benar, yangif
ingin dilihat untuk mengevaluasi dengan benar.vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>
:vnoremap
berarti memetakan perintah berikut dalam mode visual, tetapi jangan memetakannya secara rekursif (artinya tidak mengubah perintah lain yang mungkin digunakan dengan cara lain). Pada dasarnya, jika Anda seorang pemula, selalu gunakannoremap
untuk memastikan Anda tidak merusak barang-barang.<silent>
berarti "Saya tidak ingin kata-kata Anda, hanya tindakan Anda" dan mengatakan itu untuk tidak mencetak apa pun ke baris perintah.<C-r>
adalah hal yang kami pemetaan, yaitu ctrl + r dalam hal ini (perhatikan bahwa Anda masih dapat menggunakan Cr secara normal untuk "redo" dalam mode normal dengan pemetaan ini).C-u
agak membingungkan, tetapi pada dasarnya itu memastikan Anda tidak kehilangan jejak penyorotan visual Anda (menurut jawaban ini membuat perintah Anda mulai dengan'<,'>
yang kami inginkan).call
sini hanya memberitahu vim untuk menjalankan fungsi yang kami beri nama, dan<cr>
mengacu pada memukulenter
tombol. Kita harus menekannya sekali untuk benar-benar memanggil fungsi (jika tidak kita baru saja mengetikcall function()
pada baris perintah, dan kita harus menekannya lagi untuk mendapatkan pengganti kita untuk pergi sepanjang jalan (tidak benar-benar yakin mengapa, tapi apa pun).Bagaimanapun, semoga ini membantu. Ini akan mengambil apa pun yang disorot dengan
v
,,V
atauC-v
, periksa apakah baris pertama dikomentari, jika ya, coba batalkan komentar pada semua baris yang disorot, dan jika tidak, tambahkan lapisan karakter komentar tambahan untuk setiap baris. Inilah perilaku yang saya inginkan; Saya tidak hanya ingin beralih apakah setiap baris di blok dikomentari atau tidak, jadi itu berfungsi dengan baik bagi saya setelah mengajukan beberapa pertanyaan pada subjek.sumber