2010-01-24 12 views
5

Cuando uso vi para abrir un archivo * .c, me gustaría que el cursor se mueva a la cadena "principal" automáticamente . Si no hay "main", quiero que el cursor pase a "void" sin un mensaje de error.Vim: mover el cursor a una cadena en un archivo fuente sin mensajes de error si no existe

En mi .vimrc he puesto

:autocmd BufRead *.c 1;/main 

pero esto no se puede poner en práctica todos mis requisitos. Específicamente, si no existe un "principal" en algún archivo fuente C abierto, vi pregunta "Error, no se puede encontrar el principal ...", que es el comportamiento que deseo eliminar.

También he intentado agregar <silent> o a esa línea autocmd, pero no hace lo que quiero. ¿Alguien puede ayudarme? Gracias.

Respuesta

0

Pruebe/main \ | ^, pero si el cursor del archivo no está en la primera línea, no es lo que desea.

3

Simplemente use :silent! que ejecuta el comando de bloqueo no solo mensajes normales, sino también errores.

Por cierto, recomiendo que uses BufReadPost (ejecutar el comando después de un buffer sería cargado) y la búsqueda de main como una palabra completa.

Así que trate esto:

:autocmd BufReadPost *.c :silent! 1;/\<main\> 
+0

Gracias. ¿Podría decirme cómo implementar el control de estructura en vimrc, como la estructura If-else? Por ejemplo, si hay "main", el cursor va a "main" y si no hay "main", el cursor va a "void". – fortunetell

+0

Si la estructura de if/else no es complicada, solo eche un vistazo a ': help if'. Para buscar, puede usar la función 'búsqueda' que devuelve el número de línea donde se ha encontrado la ocurrencia o cero (sin generar un error). Por ejemplo ': if search ('\ ') == 0 | búsqueda de llamadas ('\ ') | endif' Este comando comprueba si se puede encontrar la palabra "principal" comenzando desde la posición actual del cursor, y si no (la búsqueda devuelve cero) llamando a la función de búsqueda para "void" –

+0

Entonces podrías transformar tu autocmd a algo así: ': autocmd BufReadPost * .c: ¡silencioso! 1 | if search ('\ ') == 0 | búsqueda de llamadas ('\ ') | endif' Tenga en cuenta que varias declaraciones en una línea deben separarse con '|'. Además, para llamar a una función fuera del comando de Vim ('if',' while', 'let', etc.) es necesario usar' call'. –

Cuestiones relacionadas