Vim - mengelilingi baris komentar dengan karakter komentar

27

Hari ini saya menyadari bahwa saya sering suka mendefinisikan bagian-bagian dalam kode saya seperti:

####################
# Helper Functions #
####################

Tapi itu membosankan untuk dilakukan. Dengan asumsi saya memiliki garis seperti ini:

# Helper Functions #

Apa set vimpenekanan tombol paling pendek untuk membungkusnya menjadi #? Shift tidak dihitung sebagai penekanan tombol dalam tantangan ini.

Kasus uji:

Input: "#test test test#"
Output:
################
#test test test#
################

Input: "#this is a nice block comment#"
Output:
##############################
#this is a nice block comment#
##############################

Input: "# s p a c e s must be supported a l s o#"
Output:
########################################
# s p a c e s must be supported a l s o#
########################################
shearn89
sumber
3
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena "penekanan tombol vim" pada dasarnya berarti menjalankan perintah IDE, seperti Ctrl - C, atau Ctrl - R di ST2. Ini bukan pengkodean dalam bentuk apa pun.
Pengoptimal
3
@Optimizer Vim adalah bahasa lengkap turing (misalnya dengan menggunakan makro) dengan beberapa pengkodean konstruk yang berbeda dan metode utama untuk pengeditan didasarkan pada kata kerja (tindakan) suatu objek (gerakan). Sudah ada halaman web populer untuk golf vim: www.vimgolf.com. (Tapi saya setuju bahwa pertanyaan khusus ini sangat membosankan)
Hjulle
1
@Optimizer: apakah ada situs SE yang lebih cocok dengan pertanyaan yang dapat dipindahkan? Mengingat skrip / bahasa makro vim yang luas, beberapa orang mungkin menganggapnya sebagai bahasa itu sendiri.
shearn89
1
@ Shearn89 Hostile? Apa yang kamu bicarakan ? PPCG adalah situs ini.
Pengoptimal
2
Mengapa IDE lain tidak diizinkan juga jika Anda dapat menulis program di sistem makro mereka? Apa yang membuatnya "bukan pemrograman"?
Hjulle

Jawaban:

40

11 8 7 penekanan tombol

YpVkr#p

Yp - duplicate current line, leaving the cursor at the lower of the two
V - enter visual line mode
k - go up and select both lines
r# - replace every selected character with #. Leaves visual mode and leaves cursor at the upper line.
p - put the yanked line (the original) on the next line.

(terima kasih kepada gagang pintu untuk mengingatkan Y = yy)

rorlork
sumber
3
Ganti yydengan Yuntuk menyimpan karakter.
Gagang pintu
2
Wow, rperintah itu sangat kuat
justhalf
10

16 15 14 penekanan tombol

Yp
:s/./#/g
<cr>
YkP

Pendekatan straight-forward: menduplikasi baris, ganti semua karakter dengan #, salin hasilnya dan rekatkan di atas.

Saya menghitung Pdan :sebagai masing-masing satu penekanan tombol (bukan dua untuk Shift+ patau Shift+ ;). Yang sedang berkata, pertanyaannya menentukan untuk menghitung "perintah", di mana saya tidak yakin bagaimana menghitung substitusi.

Martin Ender
sumber
Komentar yang sama seperti pada jawaban @ rcrmn: Ganti yydengan Yuntuk menyimpan karakter.
Gagang Pintu
Saya percaya ini sebenarnya 14 penekanan tombol, karena Anda harus menekan Intro untuk menjalankan perintah ganti
rorlork
@ crmn Oh, tangkapan yang bagus.
Martin Ender