Як прокоментувати блок коду Python у Vim


186

Мені було цікаво, чи є в Vim якесь ключове відображення, щоб дозволити мені відступити певні рядки коду (чи вибрано ці рядки у візуальному режимі, або п рядків вище / нижче поточного положення курсору).

Так що в основному щось перетворює наступне

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

до

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

Я в порядку з використанням будь-якого #або """для коментування відповідних рядків. В ідеалі, я також хотів би те ж саме клавіатурне зіставлення, щоб коментувати рядки, якщо ці рядки були прокоментовані.


Не потрібно винаходити колесо, є плагін: tComment для вас, який підтримує (не) код коментування для декількох мов.
Мяу

Відповіді:


411

Крок 1: Перейдіть до першого стовпця першого рядка, який ви хочете прокоментувати.

Початковий стан

Крок 2: Натисніть: Ctrl+ vта виберіть рядки, які хочете коментувати:

Виберіть лінії

Крок 3: Shift - I#space(Увійдіть в режим Вставка ліворуч, введіть символи для вставки. Вибір зникне, але всі рядки в ньому будуть змінені після кроку 4.)

Прокоментуйте

Крок 4: Esc

<Esc>


4
Коментуючи рядки таким чином, чудово працює. Чи є якийсь спосіб коментувати ці рядки? Shift-I # <ESC>не працювало (можливо, я роблю це неправильно).
Rishabh Manocha

41
@ rishabh-manocha: використовуйте візуальний блок (Ctrl-V), щоб вибрати всі додані # та введіть x, щоб видалити їх.
theosp

3
Ви повинні пам’ятати, що Shift-I означає «вставити на першому непорожньому рядку», тому його не можна використовувати для видалення. Виконуючи візуальний вибір з Ctrl-V, знаки змінюються, а потім "x" видаляє один символ у вибраній області, закінчуючи видаленням символів "#". Додаткову інформацію див. У розділі ": h I" та ": h CTRL-V" in vim.
Олов'яний чоловік

5
@Samaursa Ctrl-V, ймовірно, не працює в Windows. Спробуйте замість цього Ctrl-Q.
AZ.

1
Щоб видалити два символи (якщо ви вставили "#"), знайдіть курсор у верхньому рядку, який ви хочете змінити, натисніть 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
зафіксовано

1
Я трохи змінив: Ctrl + k для коментаря "vnoremap <silent> <Ck>: s # ^ # \ ## <cr>: noh <cr>"> Ctrl + u для коментаря: "vnoremap <silent> <Cu >: s # ^ \ ### <cr>: noh <cr> "
Прадіп Дас

1
@JonathanHartley вам не доведеться використовувати "/" у цьому випадку "#" є роздільником. Отже: s / ^ / # / і: s / ^ # // є рівнозначними підмінами. Тому замініть початок рядка на "#" та замініть "#" у першому стовпці на "". <cr>: noh <cr> просто очищає рядок пошуку, тому нічого не залишається виділено, коли ви закінчите.
зафіксовано

1
@JonathanHartley чесно кажучи, я думаю, що я просто дотримувався шаблону, не замислюючись над цим. Зараз я здивований # vs / не з’явився раніше. Відповідь змінив на основі здорового глузду. Дякую!
затверджені

26

Виділіть свій блок за допомогою: ShiftV

Прокоментуйте вибраний блок за допомогою: :norm i#(малого регістру i)

Щоб коментувати, знову виділіть блок та коментуйте: :norm ^x

The :normКоманда виконує дію для кожної обраної лінії. Коментування вставитиме #на початку кожного рядка, а коментар видалить його #.


За допомогою сучасного Vim та простого конфігурації вибирайте лінії у візуальному режимі (з Shift+v), а потім використовуючи :norm i#лише зміни першої обраної лінії. Це працює для мене, щоб коментувати рядки 389 до 391::389,391norm i #
mmell

22

Зазвичай я підмітаю візуальний блок ( <C-V>), потім шукаю і замінюю перший символ на:

:'<,'>s/^/#

(Введення командного режиму з обраним візуальним блоком автоматично розміщує '<,'> у командному рядку) Потім я можу скаментувати блок, змістивши той же візуальний блок і:

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


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 для цього посилання . Він може обробляти майже кожен синтаксис. Він визначає приємні рухи, використання його з деякими текстовими блоками, що відповідають специфічним для python, робить його потужним інструментом.


5

NERDcommenter - чудовий плагін для коментування, який автоматично виявляє ряд типів файлів та їх асоційованих символів коментарів. Слід легко встановити за допомогою Pathogen .

Прокоментуйте с <leader>cc. Невідповідність с <leader>cu. І перемикайте коментарі за допомогою<leader>c<space> .

(Типовим <leader>ключем у vim є \)


3

Існує багато плагінів для коментарів для vim - кількість з яких є багатомовною - не лише python. Якщо ви використовуєте диспетчер плагінів, як Vundle, ви можете шукати їх (після встановлення Vundle), наприклад:

:PluginSearch comment

І ви отримаєте вікно результатів. Крім того, ви можете просто шукати vim-сценарії для плагінів для коментарів .


3

Не потрібні додатки або відображення. Спробуйте вбудовану команду "норма", яка буквально виконує все, що завгодно, у кожному вибраному рядку.

Додати # коментарів

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

Видалити # коментарів

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

Або якщо ваші коментарі з відступом, ви можете зробити :norm ^x

Зауважте, що це лише звичайні команди vim, яким передує ": норма" для виконання їх у кожному рядку.

Більш детальна відповідь на використання команди "норма" в одній з відповідей тут

Який швидкий спосіб коментувати / коментувати рядки у Vim?


1

Дуже мінімальний легкий плагін : vim-коментар.

gccпрокоментувати рядок
gcgcдо коментаря. перегляньте сторінку плагіна для отримання додаткової інформації.

v+k/jвиділіть блок, а потім gccпрокоментуйте цей блок.


0

CtrlK для коментаря (візуальний режим):

vnoremap <silent> <C-k> :s#^#\##<cr>:noh<cr>

CtrlU для коментаря (Візуальний режим):

vnoremap <silent> <C-u> :s#^\###<cr>:noh<cr>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.