Как закомментировать блок кода Python в Vim - PullRequest
179 голосов
/ 01 апреля 2010

Мне было интересно, было ли какое-либо отображение клавиш в Vim, позволяющее мне делать отступы для определенных строк кода (были ли эти строки выбраны в визуальном режиме или n строк выше / ниже текущей позиции курсора) .

Так что в основном то, что преобразует следующее

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

до

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

Я в порядке, используя # или """ для комментирования соответствующих строк. В идеале мне бы хотелось, чтобы такое же сопоставление клавиш раскомментировало строки, если данные строки были закомментированы.

Ответы [ 13 ]

396 голосов
/ 01 апреля 2010

Шаг 1: Перейти к первому столбцу первой строки, которую вы хотите прокомментировать.

Initial State

Шаг 2: Нажмите: Ctrl + v и выберите строки, которые вы хотите прокомментировать:

Select lines

Шаг 3: Shift - I # пробел (Войдите в режим вставки слева, введите символы для вставки. Выбор исчезнет, но все строки в нем будут изменены после шага 4.)

Comment

Шаг 4: Esc

image">

66 голосов
/ 01 апреля 2010

в одну сторону вручную

:set number
:10,12s/^/#
45 голосов
/ 04 февраля 2013

Вы можете добавить следующее отображение к вашему .vimrc

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

Выделите свой блок с помощью:

Shift+v

#, чтобы прокомментировать ваши строки из первого столбца.

-# таким же образом раскомментировать.

24 голосов
/ 31 мая 2013

Выделите свой блок с помощью: Shift V

Прокомментируйте выделенный блок с помощью: :norm i# (нижний регистр i)

Чтобы раскомментировать, снова выделите ваш блок и раскомментируйте с помощью: :norm ^x

Команда :norm выполняет действие для каждой выбранной строки. При комментировании в начале каждой строки вставляется #, а при комментировании удаляется #.

21 голосов
/ 02 апреля 2010

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

:'<,'>s/^/#

(При входе в командный режим с выбранным визуальным блоком автоматически помещается '<,'> в командной строке). Затем я могу раскомментировать блок, сместив тот же визуальный блок и:

:'<,'>s/^#//
19 голосов
/ 01 апреля 2010

Есть несколько хороших плагинов, которые помогают комментировать / раскомментировать строки. Например Комментатор NERD .

8 голосов
/ 02 апреля 2010

У меня есть следующие строки в моем .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
5 голосов
/ 08 декабря 2013

NERDcommenter - отличный плагин для комментирования, который автоматически определяет количество типов файлов и связанных с ними символов комментариев. Смешно легко установить, используя Pathogen .

Комментарий с <leader>cc. Раскомментировать с <leader>cu. И переключать комментарии с помощью <leader>c<space>.

(по умолчанию <leader> ключ в vim: \)

5 голосов
/ 01 марта 2013

Честно говоря, я использую плагин tcomment для этой ссылки . Он может обрабатывать практически любой синтаксис. Он определяет хорошие движения, используя его с некоторыми сопоставителями текстовых блоков, специфичными для python, делает его мощным инструментом.

2 голосов
/ 18 июня 2018

Никаких плагинов или сопоставлений не требуется. Попробуйте встроенную команду «норма», которая буквально выполняет все, что вы хотите в каждой выбранной строке.

Добавить # Комментарии

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

Удалить # Комментарии

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

Или, если ваши комментарии с отступом, вы можете сделать :norm ^x

Обратите внимание, что это просто обычные команды vim, перед которыми стоит ": norm" для выполнения их в каждой строке.

Более подробный ответ по использованию команды "норма" в одном из ответов здесь

Какой быстрый способ комментировать / раскомментировать строки в Vim?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...