2010-04-01 2 views
170

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

Поэтому в основном то, что преобразует следующий

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

в

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

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

+0

Не нужно изобретать колесо, есть [плагин: tComment] (https://github.com/tomtom/tcomment_vim) для вас, который поддерживает (un) код комментария для нескольких языков. – Meow

ответ

372

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

Initial State

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

Select lines

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

Comment

Шаг 4:Esc

<Esc>

+3

Комментируя строки таким образом, отлично работает. Есть ли способ раскомментировать эти строки? 'Shift-I # ' не работал (возможно, я делаю это неправильно). –

+37

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

+3

Вы должны помнить, что Shift-I означает «вставить в первый непустой символ в строке», поэтому его нельзя использовать для удаления. Выполнение визуального выделения с помощью Ctrl-V обозначает символы для изменения, затем «x» удаляет один символ в выбранной области, в результате чего удаляются символы «#». Для получения дополнительной информации см. «: H I» и «: h CTRL-V» в vim. –

61

один путь вручную

:set number 
:10,12s/^/# 
+3

как их удалить? –

+11

@CharlieParker: ': 10,12s/^ # //' – bstpierre

+1

Thumbs up for ex answer (старая школа :) – mlv

19

Есть несколько хороших плагинов для помочь прокомментировать/раскомментировать строки. Например, The NERD Commenter.

20

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

:'<,'>s/^/# 

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

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

у меня есть следующие строки в моем .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 

После uncomennting:

# variable x 
x = 0 
+0

Ницца, но я думаю вам лучше использовать более простой '' '' '' '' '' '' '' '' '' '' '' regexp. Я предпочитаю, чтобы символ комментария встречался в начале строки ... но, что еще более важно, комментарии комментариев довольно важно. Я бы также сбросил '' 'au BufEnter * .py''', так как комментарии' # 'достаточно общие для команд, которые будут использоваться во всех буферах по умолчанию. – travc

36

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

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

Выделите ваш блок с:

Shift+v 

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

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

+4

Простой блестящий! Спасибо! – I159

+0

Любой способ сделать это не обновлять поисковый запрос? С 'hlsearch' on, это заканчивается тем, что выделяет первый символ любой строки. – ajwood

+0

этот переопределяет #, которая является допустимой и используемой командой в команде mode, но – architectonic

5

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

+0

Спасибо! Это отлично работает (по крайней мере, в C++). – foges

21

Выделите блок с: Shift+v

Комментария выбранного блок с: :norm i# (строчными)

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

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

+0

С обновленным Vim и простой конфигурацией выбор линий в визуальном режиме (с помощью Shift + v'), а затем с использованием ': norm i #' изменяет только первую выбранную строку. Это работает для меня, чтобы комментировать строки с 389 по 391: ': 389,391norm i #' – mmell

5

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

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

(по умолчанию <leader> ключ в Vim является \)

1

Там много комментариев плагинов для Vim - некоторые из которых являются многоязычная - не только питон. Если вы используете менеджер плагинов, как Vundle то вы можете искать их (как только вы установили Vundle), используя например .:

:PluginSearch comment 

И вы получите окно результатов. В качестве альтернативы вы можете просто search vim-scripts for comment plugins.

1

Ctrl + K для комментариев (Visual Mode):

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

Ctrl + U для раскомментировать (Visual Mode):

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

Очень минимальный легкий вес plugin: ВИМ -комментарий.

НКУ комментировать линию
gcgc раскомментировать. просмотрите страницу плагина для получения дополнительной информации.

v + к/х выделить блок затем НКУ комментировать этот блок.