2009-09-24 16 views
7

Aquí está la lista de las minas¿Cuáles son los comandos más útiles vim/utilizados en C/C++ entorno de desarrollo

A diferencia de mí - como lo hice con fines ilustrativos - no pegar demasiados.

Y lo más importante, proporcionar una explicación

Comandos no debería ser genérico, pero relevantes para el entorno C++/C. ctags & alcance también son bienvenidos

gi .....................init insert mode in last insertion position 

'0 .....................open last edited file 

gf .....................open file under cursor in same window 

Ctrl-w q ...............close current window 

:setlocal autoread .....Auto reloads the current buffer..especially useful while viewing log files 

for i in range(1,255) | .put='10.0.0.'.i | endfor.... insert range ip's 

g; and g, .......................to move (forward, backward) through the changelist 

fx Move the cursor forward to the next occurrence of the character x on the current line (obviously, x can be any character you like). This is an extremely useful command. You can type ; to repeat the last f command you gave. 

tx Same as above, but moves the cursor to right before the character, not all the way to it. (It's very useful, really.) 

Fx Move the cursor backward to the next occurrence of the character x on the current line. 
w Move the cursor forward by a word. 
b Move the cursor backward by a word. 
0 Move the cursor to the beginning of the current line. 
^ Move the cursor to the first character on the current line. 
$ Move the cursor to the end of the line 


Visual search ....... you can simply yank the selected text with y and go to search mode 
/, then you can paste the last yanked text with Ctrl+R 0 

ci" - cuts the text in current quotes 
ciw - cuts the current word. This works just like the previous one except that (is replaced with w. 
C - cut the rest of the line and switch to Insert mode. 
zz -- it scrolls the screen to make this line appear in the middle 
C - cut the rest of the line and switch to Insert mode. 
de - delete from cursor to the end of the word (you can also do dE to delete until the next space) 
df[space] -- delete up until and including the next space 
bye -- copies current word 
b and e move the cursor word-by-word 
capital D (take a deep breath) Deletes the rest of the line to the right 
cd %:h change to current directory 
:r! <command> pastes the output of an external command into the buffer. 
:%s/foo/bar(&)/g will look for foo, and surround the matched pattern with bar(). 
:s/.*/PREFIX & SUFFIX/ you want to add a prefix and a suffix simultaneously, you can do something like this: 

gd....... keystroke stands for Goto Declaration 
gD....... This takes you to the global declaration of the variable under the cursor 
------------------ 
:make error 
[make_error] 
On pressing RETURN, the cursor moves to line number 6 
Now, the command :cn will move the cursor to the line number 4. 
To move back to the previous error, one can use the command :cN and the cursor will move back to the line 6. 
After correcting the error on line 5 and adding "return 1;", one can run :make again and the output will be 


--------- 
:%!grep sdf | sort -n -k3 

1)select the whole content using '%' 
2) pipe it to an external command using '!' 
3) grep onyl the lines containing 'sdf' 
4) sort these lines numerically (-n) on the third field (-k3) 


d$ will delete from current position to end of line 
d^ will delete from current backward to first non-white-space character 
d0 will delete from current backward to beginning of line 
dw deletes current to end of current word (including trailing space) 
db deletes current to beginning of current word 

:%s/pattern//gn........... For counting the number of times some pattern occurs, use: 

CTRL-O Go to [count] Older cursor position in jump list 
CTRL-I Go to [count] newer cursor position in jump list 


zz - line that has a cursor is in the middle of the screen 
zt - line that has a cursor is in the top of the screen 
zb - line that has a cursor is in the buttom of the screen 

set printoptions=number:y ...set numbers in a hardcopy 
:hardcopy.... to print the file :w 

shift d ...... Deleting from current position to end of line 
vim -o ....... allows you to open two windows, split vertically horizontally 
vim -O ....... allows you to open two windows, split vertically 
CTRL+W CTRL-Q ......to close the current windows 
qall.........How do I quit all windows 

0 ...First position on line 
Ctrl g ...where am I 
:set wrapmargin=70 
printexpr=system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice) . ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error 

Tab block of code ....select your block of code (with [V]isual line mode normally), then press > or <. 
If you want to tab more than once, 2> or 3> to repeat it. 

Noticias:

Guys, let's REOPEN THIS QUESTION, and go WIKI-CRAZY! 
+0

Siempre puede consultar la pregunta http://stackoverflow.com/questions/69871/vim-vi-survival-guide que pregunta "¿Cuáles son los comandos esenciales de vim?" – amischiefr

+2

Bueno, esos son generales, estoy particularmente interesado en aquellos que usan vim para el entorno de desarrollo de C++. – vehomzzz

+0

Así son todos sus ejemplos. No hay construcciones solo C++ (que yo sepa) en vi/vim. – amischiefr

Respuesta

1

debería echar un vistazo a SnippetsEmu. Un gran plugin que le ahorrará muchas palabras escritas regularmente en C.

Nota: Usted está preguntando por comandos y no por complementos, pero solo quería mencionar esto de todos modos.

+0

IMO, los complementos son relevantes: vim por sí solo es bastante pobre para desarrollar en C++ o incluso en C. –

3

Un conjunto de comandos que considero útil es [[,]], [],] [. Navegan a través de llaves en la primera columna, por lo que le permiten caminar efectivamente a través de las funciones si usa la sangría adecuada.

3

Aquellos puede ser útil para la programación

= - tener la intención de texto. Para sangrar todos los archivos g CTRL + V G =

CTRL-P/CTRL-O - a texto completo

} y - para pegar bloque y sangrar correctamente en un nuevo lugar. Por ejemplo, el bloque de código en el portapapeles es una sangría de 2 niveles y debe pegarse en el código, donde estará en una sangría de 3 niveles.

CTRL-X + f para completar el nombre del archivo

>>/< < - aumento/disminución muesca

% - ir a la correspondiente/cierre de paréntesis abierto

minibufexpl es un buen complemento para trabajar a la vez en varios archivos

3

>aB para sangrar un bloque. No con frecuencia utilizado, pero una joya, no obstante.

+0

¿es necesario seleccionar visualmente el bloque primero? – vehomzzz

+0

No, solo tiene el cursor dentro del bloque que desea sangrar. :) –

+1

@Andrei - ": help text-objects" le dará una mejor idea de todos los comandos con una estructura similar. En este caso, "B" también podría ser "{" o "}" con el mismo significado (me parece más fácil de recordar). Puede aplicar cualquier operador (como d para eliminar o v para la selección), así como un conteo antes de esto para aplicar al bloque. –

2

Usar vistas diferentes es útil para la comparación de código lado a lado.
Tenga en cuenta que cada vista creada por una división puede contener un archivo separado.

Para dividir la vista horizontal

:split 

Para dividir la vista vertical

:vsplit 

para moverse entre las vistas divididas

^W<arrow>  (Thats control W) (Arrow Key) 

Una vez que haya configurado el archivo de etiquetas:

^]    (Move over identifier you want to find: Hit Control ]) 
:tn   Next Tag 
:tp   Previous Tag 
:pop   Pop back to the place you where when you hit ^] 
+0

+1 Porque mis sesiones de vim son hells divididos, incluso si no uso directamente: sp y: vsp para hacerlo. –

4

Los que yo uso excesivo son los siguientes:

  • :AV a verticalmente dividir la ventana actual y abrir el archivo de cabecera/fuente asociado al archivo de origen/cabecera correspondiente (si aún no está abierto, de lo contrario, saltamos a la su ventana en su lugar)
  • :GSp and :GVSp para dividir la ventana actual y abrir el archivo solicitado (que está en algún lugar & ruta), o saltar al archivo si ya está abierta
  • <m-x> para alternar comentario en la línea actual
  • :Make para compilar el proyecto actual en el fondo - NB: una bandera necesita ser establecido con el fin de hacerlo
  • <c-x>be añadir .begin(), /container_name/.end() en whatever(container_name<curoser_here>)
  • #i que se ampliará en #include
  • :DOX que será añadir un comentario doxygen al prototipo de la función actual - parámetros const-/ref-ness, throw spec, return type se toman en cuenta
  • :GOTOIMPL que crearán un cuerpo predeterminado a partir de la declaración de función actual (o salta a la ya existente cuerpo cuando possib le)
  • <c-w><m-down>: otra forma de navegar la base etiquetas
  • for/if/...: expandirse en el fragmento de código correspondiente en el modo de inserción (fuera de la cadena de contexto/comentario)
  • ,for/,if/.. and ,,for/,,if/... para rodear la selección actual por el fragmento de código relevante , la selección irá en el cuerpo de control de declaración (uno,), o su condición (dos,)
  • tpl expande en template <<cursor>><+placeholder+>
  • todos los movimientos de texto a objetos con =, D, C, ... + di,/vi,/... que actúa sobre el parámetro actual
  • <c-x>v, <c-x>t para extraer la variable seleccionada/tipo (refactoring)
  • All the bracket opening characters + <m-del> para mantener los soportes equilibradas

Hay muchos otros comandos que utilizo cuando desarrollo en C++, pero con menos frecuencia - simplemente explorar los enlaces I dado.

1

Lo mejor que he usado es cuando utilicé una combinación de combinar running make y Quickfix. Presioné F6 para compilar, y luego F7 para retroceder a través de los errores y F8 para avanzar usando los números de línea en la salida de advertencia/error de gcc.Más rápido que alt-tab, presiona hacia arriba.

Cuestiones relacionadas