2010-04-01 22 views
170

Me preguntaba si había alguna asignación de teclas en Vim para permitirme sangrar ciertas líneas de código (si esas líneas se han seleccionado en modo visual, o n líneas arriba/abajo de la posición actual del cursor).Cómo comentar un bloque de código Python en Vim

Así que, básicamente, algo que convierte la siguiente

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

a

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

estoy bien con el uso de cualquiera de # o """ por comentar las líneas relevantes. Idealmente, también me gustaría el mismo mapeo de teclas para descomentar las líneas si las líneas dadas han sido comentadas.

+0

No es necesario reinventar la rueda, hay un [complemento: tComment] (https://github.com/tomtom/tcomment_vim) para usted, que admite (des) código de comentario para varios idiomas. – Meow

Respuesta

372

Paso 1: Ir a la primera columna de la primera línea que desea comentar el.

Initial State

Paso 2: Prensa: Ctrl + v y seleccionar las líneas que desea comentar:

Select lines

Paso 3:Shift - I#espacio (Ingrese al modo Insertar-a la izquierda, escriba caracteres para insertar. La selección va a desaparecer, pero todas las líneas dentro de ella será modificado después del paso 4.)

Comment

Paso 4:Esc

<Esc>

+3

Comentando las líneas de esta manera funciona muy bien. ¿Hay alguna forma de descomentar estas líneas? 'Shift-I # ' no funcionó (tal vez lo estoy haciendo mal). –

+37

@ rishabh-manocha: use el bloque visual (Ctrl-V) para seleccionar todos los # agregados y escriba x para eliminarlos. – theosp

+3

Debe recordar que Shift-I significa "insertar en el primer no blanco de la línea", por lo que no se puede usar para eliminar. Hacer una selección visual con Ctrl-V marca los caracteres a modificar, luego "x" borra un carácter en el área seleccionada y termina borrando los caracteres '#'. Consulte ": h I" y ": h CTRL-V" en vim para obtener más información. –

61

un modo manual

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

¿cómo los eliminas? –

+11

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

+1

Thumbs up for ex answer (old school :) – mlv

19

Hay algunos buenos complementos a ayudar a comentar/descomentar líneas Por ejemplo, The NERD Commenter.

20

lo general barrer un bloque visual (<C-V>), a continuación, buscar y reemplazar el primer personaje con:

:'<,'>s/^/# 

(modo de comando Entrando con un bloque visual seleccionada automáticamente coloca '<,'> en el comando línea) puedo entonces elimine el bloque barriendo a cabo el mismo bloque visual y:

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

tengo las siguientes líneas en mi .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 

Los accesos directos conservan la posición del cursor y sus comentarios siempre que comiencen con # (hay espacio después de #). Por ejemplo:

# variable x 
x = 0 

Después de comentar:

# variable x 
#x = 0 

Después uncomennting:

# variable x 
x = 0 
+0

Agradable, pero creo Sería mejor que usas la expresión regular '' 's/^/# /' '. Prefiero que el comentario char ocurra al principio de la línea ... pero mucho más importante, 'comentar comentarios' es realmente bastante importante. También soltaría el '' 'au BufEnter * .py''', ya que los comentarios' # 'son lo suficientemente generales para que los comandos se usen en todos los buffers de manera predeterminada. – travc

36

podría añadir la siguiente asignación a su .vimrc

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

Resalte su bloque con:

Shift+v 

# para comentar sus líneas de la primera columna.

-# para descomentar de la misma manera.

+4

¡Simple es genial! ¡Gracias! – I159

+0

Cualquier forma de hacer que esto no actualice el término de búsqueda? Con 'hlsearch' activado, esto termina resaltando el primer carácter de la línea ever. – ajwood

+0

este reemplaza # que es un comando válido y usado en el comando aunque el modo – architectonic

5

Francamente uso un plugin de tcomment para ese link. Puede manejar casi todas las sintaxis. Define movimientos agradables, usándolo con algunos matchers de bloque de texto específicos para python que lo convierten en una herramienta poderosa.

+0

Gracias! Esto funciona muy bien (al menos en C++). – foges

21

resaltar su bloque con: Shift+v

comentario el bloque seleccionado con: :norm i# (i minúscula)

quitar los comentarios, resalte su bloque nuevo, y elimine el comentario con: :norm ^x

El :norm comando realiza una acción para cada línea seleccionada. Comentar insertará un # al comienzo de cada línea, y el comentario eliminará ese #.

+0

Con un Vim actualizado y una configuración simple, seleccionar líneas en modo visual (con 'Shift + v') y luego usar': norma i # 'solo cambia la primera línea seleccionada. Esto me funciona para comentar las líneas 389 a 391: ': 389,391norm i #' – mmell

5

NERDcommenter es un plugin excelente para comentar que detecta automáticamente un número de tipos de archivos y sus caracteres de comentario asociados. Ridículamente fácil de instalar usando Pathogen.

Comentario con <leader>cc. Descomentar con <leader>cu. Y alterna los comentarios con <leader>c<space>.

(La clave por defecto <leader> en vim es \)

1

Hay una gran cantidad de plugins comentario para vim - algunos de los cuales están en varios idiomas - no sólo pitón. Si utiliza un administrador de plugins como Vundle entonces usted puede buscar para ellos (una vez que haya instalado Vundle) usando por ejemplo .:

:PluginSearch comment 

Y obtendrá una ventana de resultados. Alternativamente, puede simplemente search vim-scripts for comment plugins.

1

Ctrl + K para el comentario (modo visual):

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

Ctrl + U para comentar (modo visual):

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

Una muy mínimo peso ligero plugin: vim -comentario.

gcc a comentar una línea
GCGC a eliminar el comentario. echa un vistazo a la página de complementos para más.

v + k/j resaltar el bloque de entonces gcc comentar que bloque.

Cuestiones relacionadas