2012-08-26 51 views
17

¿Existe una funcionalidad nativa en Vim que permita mover el cursor al principio/final del siguiente método? Ya sé sobre [[, ]], [] y ][, pero estos no cortan el trabajo, porque solo funcionan con llaves que están en la columna cero. Por lo tanto, son de poca utilidad en, digamos, navegar por el código C++. ¿Existe un comando que ya esté integrado en Vim? Si no, ¿recomendarías un complemento que lo implemente?Vim: ir al principio/fin del siguiente método

Gracias por su ayuda!

Editar: [{ y }] no va a funcionar todo el tiempo, porque hay que estar dentro del bloque con el {} (y no en un ámbito más profundo dentro de ese bloque) que se le termina a la derecha { o } después.

Editar 2: Aquí hay un listado de código para el cual [m y sus amigos no funcionan.

namespace foo { 

#define define_foo   \ 
    template <class T>  \ 
    struct foo_traits<X> \ 
    {      \ 
     using foo = X;  \ 
    }; 

template <class T> 
struct foo_traits; 

define_bar(T*, T*, T*); 

template <class T> 
struct baz; 

template <class T> 
struct baz<T&> 
{ 
    static T* apply(T& t) { return &t; } 
}; 

template <class T> 
inline T a(T t) { return t; } 

} 
+4

En Java usaría un IDE diseñado para desarrollar Java. Del mismo modo para C++. –

+20

@PeterLawrey que es muy útil para saber ... – jalf

+2

¿Intentó '[{' y ']}'? –

Respuesta

34

Vim tiene [m/]m construida en "para Java o lenguaje estructurado similares".

He escrito versiones personalizadas que manejan Vim functions, VBScript y batch files, entre otras. Todos estos funcionan con mi CountJump plugin, que se puede usar para escribir funciones de salto personalizadas basadas en expresiones regulares.

+0

Creo que el soporte para C++ requerirá algo más poderoso que las expresiones regulares, porque incluso '[m','] m' , '[M','] M' no funcionan para mi código C++. –

+1

Si buscas una solución al 100%, necesitas un analizador de C++ completo; pero generalmente, a menudo se puede lograr una solución "correcta en su mayoría" con expresiones regulares; cp. El resaltado de sintaxis de Vim. –

+0

+1 para contribuir scripts de vim. –

2

Parece que un duplicado de: Vim [m motion with c#

Podría, por ejemplo, darle una oportunidad a este truco sucio: 9]}. Lo que simplemente salta al 9º puesto } desde la ubicación actual (si no está demasiado anidado, debería funcionar ...)

Cuestiones relacionadas