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

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

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

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

кому:

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

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

182
задан Keith Pinson 12 July 2012 в 12:15
поделиться

5 ответов

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

Initial State

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

Select lines

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

Comment

Шаг 4: Esc

<Esc>

400
ответ дан 23 November 2019 в 06:03
поделиться

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

:set number
:10,12s/^/#
67
ответ дан 23 November 2019 в 06:03
поделиться

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

:'<,'>s/^/#

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

:'<,'>s/^#//
22
ответ дан 23 November 2019 в 06:03
поделиться

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

19
ответ дан 23 November 2019 в 06:03
поделиться

У меня есть следующие строки в моем .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
8
ответ дан 23 November 2019 в 06:03
поделиться