วิธีการคอมเม้นท์บล็อกของรหัสไพ ธ อนในกลุ่ม


186

ฉันสงสัยว่ามีการทำแผนที่ปุ่มใด ๆ ใน Vim เพื่อให้ฉันสามารถเยื้องบรรทัดของรหัส (ไม่ว่าจะเลือกบรรทัดเหล่านั้นในโหมดภาพหรือnเส้นด้านบน / ด้านล่างตำแหน่งเคอร์เซอร์ปัจจุบัน)

ดังนั้นโดยทั่วไปสิ่งที่แปลงดังต่อไปนี้

def my_fun(x, y):
    return x + y

ถึง

#def my_fun(x, y):
#    return x + y

ฉันโอเคกับการใช้อย่างใดอย่างหนึ่ง#หรือ"""สำหรับการแสดงความคิดเห็นในบรรทัดที่เกี่ยวข้อง โดยหลักการแล้วฉันต้องการใช้การกดปุ่มเดียวกันเพื่อยกเลิกการใส่เครื่องหมายความคิดเห็นหากมีการให้ความคิดเห็น


ไม่จำเป็นต้องบูรณาการล้อมีปลั๊กอิน: tCommentสำหรับคุณซึ่งรองรับ (un) รหัสความคิดเห็นสำหรับหลายภาษา
Meow

คำตอบ:


411

ขั้นตอนที่ 1:ไปที่คอลัมน์แรกของบรรทัดแรกที่คุณต้องการแสดงความคิดเห็น

รัฐเริ่มต้น

ขั้นตอนที่ 2:กด: Ctrl+ vและเลือกบรรทัดที่คุณต้องการแสดงความคิดเห็น:

เลือกเส้น

ขั้นตอนที่ 3: Shift - I#space(เข้าสู่โหมดแทรก - ด้านซ้ายพิมพ์ตัวอักษรเพื่อแทรกการเลือกจะหายไป แต่บรรทัดทั้งหมดที่อยู่ภายในจะถูกแก้ไขหลังจากขั้นตอนที่ 4)

คิดเห็น

ขั้นตอนที่ 4: Esc

<Esc>


4
การแสดงความคิดเห็นเส้นด้วยวิธีนี้ใช้งานได้ดี มีวิธีในการยกเลิกข้อคิดเห็นบรรทัดเหล่านี้หรือไม่? Shift-I # <ESC>ไม่ทำงาน (บางทีฉันทำผิด)
Rishabh Manocha

41
@ rishabh-manocha: ใช้ visual block (Ctrl-V) เพื่อเลือก # ที่เพิ่มทั้งหมดแล้วพิมพ์ x เพื่อลบ
theosp

3
คุณต้องจำไว้ว่า Shift-I หมายถึง "แทรกที่ไม่ว่างแรกในบรรทัด" ดังนั้นจึงไม่สามารถใช้ในการลบ การเลือกภาพด้วย Ctrl-V ทำเครื่องหมายอักขระที่ต้องการแก้ไขจากนั้น "x" จะลบอักขระหนึ่งตัวในพื้นที่ที่เลือกแล้วลงท้ายด้วยการลบอักขระ '#' ดู ": h ฉัน" และ ": h CTRL-V" ในกลุ่มสำหรับข้อมูลเพิ่มเติม
คนดีบุก

5
@Samaursa Ctrl-V อาจไม่ทำงานบน Windows ลอง Ctrl-Q แทน
อาริโซน่า

1
หากต้องการลบ 2 ตัวอักษร (หากคุณใส่ '#') ให้ค้นหาเคอร์เซอร์ที่บรรทัดบนสุดที่คุณต้องการแก้ไขกด ctrl-v เพื่อเข้าสู่โหมดบล็อกภาพกด j (หรือลูกศรลง) เพื่อไฮไลต์บรรทัดทั้งหมดเพื่อแก้ไขกด l (หรือลูกศรขวา) เพื่อไฮไลต์ความกว้าง 2 ชาร์ (กดหนึ่งครั้งต่อคอลัมน์เพื่อไฮไลต์) จากนั้นกด d เพื่อลบข้อความที่ไฮไลต์
thinkmassive


49

คุณสามารถเพิ่มการแมปต่อไปนี้ใน. vimrc ของคุณ

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>

เน้นบล็อกของคุณด้วย:

Shift+v

# เพื่อแสดงความคิดเห็นบรรทัดของคุณจากคอลัมน์แรก

-# เพื่อไม่ใส่เกียรติเหมือนกัน


5
เรียบง่ายยอดเยี่ยม! ขอบคุณ!
I159

1
@architectonic ไม่มีผลเว้นแต่ว่าคุณอยู่ในโหมดแสดงภาพและ '#' ไม่ได้เชื่อมต่อกับโหมดแสดงภาพvimdoc.sourceforge.net/htmldoc/visual.html#visual-operators
cdated

1
ฉันได้แก้ไขบิต: Ctrl + k สำหรับความคิดเห็น "vnoremap <silent> <Ck>: s # ^ # \ ## <cr>: noh <cr>"> Ctrl + u สำหรับความคิดเห็น: "vnoremap <silent> <Cu >: s # ^ \ ### <cr>: noh <cr> "
Pradip Das

1
@JonathanHartley คุณไม่ต้องใช้ '/' ในกรณีนี้ '#' เป็นตัวคั่น ดังนั้น: s / ^ / # / และ: s / ^ # // เป็นการทดแทนที่เทียบเท่ากัน ดังนั้นแทนที่จุดเริ่มต้นของบรรทัดด้วย '#' และแทนที่ '#' ที่คอลัมน์แรกด้วย '' <cr>: noh <cr> เพียงแค่ล้างสตริงการค้นหาดังนั้นจะไม่มีการไฮไลต์เหลืออยู่เมื่อคุณทำเสร็จแล้ว
cdated

1
@JanathanHartley พูดตามตรงฉันคิดว่าฉันแค่ทำตามรูปแบบโดยไม่ได้คิดถึงมัน ตอนนี้ฉันประหลาดใจ # vs / ไม่ได้มาเร็วกว่านี้ เปลี่ยนคำตอบตามสามัญสำนึก ขอบคุณ!
cdated

26

เน้นบล็อกของคุณด้วย: ShiftV

แสดงความคิดเห็นบล็อกที่เลือกด้วย: :norm i#(ตัวพิมพ์เล็ก i)

หากต้องการยกเลิกคอมเม้นต์ให้ไฮไลต์บล็อกของคุณอีกครั้งและยกเลิกการคอมเม้นด้วย: :norm ^x

:normคำสั่งดำเนินการดำเนินการสำหรับบรรทัดที่เลือกทุก การแสดงความคิดเห็นจะแทรก#จุดเริ่มต้นของทุกบรรทัดและการยกเลิก#หมายเหตุจะลบออก


ด้วย Vim ล่าสุดและการกำหนดค่าแบบธรรมดาการเลือกบรรทัดในโหมดภาพ (ด้วยShift+v) จากนั้นใช้:norm i#การเปลี่ยนแปลงเฉพาะบรรทัดแรกที่เลือก สิ่งนี้ใช้ได้กับฉันในการแสดงความคิดเห็นบรรทัดที่ 389 ถึง 391::389,391norm i #
mmell

22

ฉันมักจะกวาดบล็อกภาพ ( <C-V>) จากนั้นค้นหาและแทนที่อักขระแรกด้วย:

:'<,'>s/^/#

(การเข้าสู่โหมดคำสั่งพร้อมบล็อกภาพที่เลือกไว้โดยอัตโนมัติจะวาง '<,'> ในบรรทัดคำสั่ง) จากนั้นฉันสามารถยกเลิกการใส่เครื่องหมายบล็อกโดยกวาดบล็อกภาพเดียวกันและ:

:'<,'>s/^#//

19

มีปลั๊กอินที่ดีบางอย่างที่จะช่วยแสดงความคิดเห็น / ยกเลิกการใส่เครื่องหมายบรรทัด ยกตัวอย่างเช่นNERD Commenter


9

ฉันมีบรรทัดต่อไปนี้ในของฉัน.vimrc:

" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N><C-N>    <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n

" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N>n     <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n

ทางลัดรักษาตำแหน่งเคอร์เซอร์และความคิดเห็นของคุณตราบใดที่พวกเขาเริ่มต้นด้วย#(มีช่องว่างหลัง #) ตัวอย่างเช่น:

# variable x
x = 0

หลังจากแสดงความคิดเห็น:

# variable x
#x = 0

หลังจากไม่ได้รับคำเตือน:

# variable x
x = 0

ดี แต่ฉันคิดว่าคุณควรใช้s/^/#/regexp ที่ง่ายขึ้น ฉันชอบถ่านความคิดเห็นที่จะเกิดขึ้นที่จุดเริ่มต้นของบรรทัด ... แต่ที่สำคัญกว่านั้นคือ 'ความคิดเห็นการแสดงความคิดเห็น' เป็นสิ่งสำคัญมาก ฉันจะลบau BufEnter *.pyเนื่องจาก#ความคิดเห็นทั่วไปเพียงพอสำหรับคำสั่งที่จะใช้ในบัฟเฟอร์ทั้งหมดโดยค่าเริ่มต้น
travc

5

ตรงไปตรงมาฉันใช้ปลั๊กอิน tcomment สำหรับลิงค์นั้น มันสามารถจัดการกับไวยากรณ์เกือบทุก มันกำหนดการเคลื่อนไหวที่ดีโดยใช้กับเครื่องมือจับคู่บล็อกข้อความบางอย่างสำหรับงูใหญ่ทำให้เป็นเครื่องมือที่ทรงพลัง


5

NERDcommenterเป็นปลั๊กอินที่ยอดเยี่ยมสำหรับการแสดงความคิดเห็นซึ่งจะตรวจจับไฟล์ประเภทต่างๆและอักขระความคิดเห็นที่เกี่ยวข้องโดยอัตโนมัติ ขันติดตั้งง่ายใช้เชื้อโรค

<leader>ccแสดงความคิดเห็นกับ uncomment <leader>cuกับ <leader>c<space>และแสดงความคิดเห็นสลับกับ

( <leader>คีย์เริ่มต้นในกลุ่มคือ\)


3

มีปลั๊กอินความคิดเห็นมากมายสำหรับ vim ซึ่งมีหลายภาษาไม่ใช่แค่หลาม หากคุณใช้ตัวจัดการปลั๊กอินเช่นVundleคุณสามารถค้นหาได้ (เมื่อคุณติดตั้ง Vundle) โดยใช้เช่น:

:PluginSearch comment

และคุณจะได้หน้าต่างผลลัพธ์ หรือคุณก็สามารถค้นหากลุ่มสคริปต์ปลั๊กอินแสดงความคิดเห็น


3

ไม่จำเป็นต้องใช้ปลั๊กอินหรือการแมป ลองใช้คำสั่ง "norm" ในตัวซึ่งเรียกใช้งานทุกอย่างที่คุณต้องการในทุกบรรทัดที่เลือก

เพิ่มความคิดเห็น #

1. shift V to visually select lines
2. :norm i#

ลบ # ความคิดเห็น

1. visually select region as before
2. :norm x

หรือถ้าความคิดเห็นของคุณถูกเยื้องคุณสามารถทำได้ :norm ^x

โปรดสังเกตว่าสิ่งเหล่านี้เป็นเพียงคำสั่ง vim ธรรมดาที่นำหน้าด้วย ": norm" เพื่อดำเนินการกับแต่ละบรรทัด

คำตอบโดยละเอียดเพิ่มเติมสำหรับการใช้คำสั่ง "norm" ในคำตอบหนึ่งในที่นี่

วิธีที่รวดเร็วในการแสดงความคิดเห็น / ยกเลิกการใส่เครื่องหมายบรรทัดใน Vim คืออะไร?


1

ปลั๊กอินน้ำหนักเบาน้อยที่สุด : vim-commentary

gcc เพื่อแสดงความคิดเห็นบรรทัด
gcgcเพื่อ uncomment ตรวจสอบหน้าปลั๊กอินสำหรับข้อมูลเพิ่มเติม

v+k/jไฮไลต์บล็อกจากนั้นgccแสดงความคิดเห็นบล็อกนั้น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.