plugin para minimalist manager vim plugins editor

para - Alinea el texto en un signo igual con vim



vim plugins 2018 (8)

Tiendo a alinear el código en signos iguales para una mejor legibilidad. De esto:

$ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main

A esto:

$ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main

¿Hay alguna manera fácil de hacer esto en vim?


Creo que esto se hace fácilmente con el complemento Tabular.vim . Aquí está en acción.

Seleccione el rango en modo Visual (no es realmente necesario) y haga lo siguiente:

:Tabularize /=

El complemento puede encontrar el rango correcto por sí mismo a menudo, sin necesidad de seleccionarlo visualmente o especificar un rango para el comando ex.


El complemento vim-easy-align también lo hace. Este es uno de los muchos ejemplos dados:


El mejor complemento que encontré hasta ahora es Tabular.vim .

La forma más sencilla de instalarlo es mediante el uso del complemento Pathogen , y luego clonando el repositorio tabular git en ~/.vim/bundle/tabular . Instrucciones completas en el README de Pathogen.

Después de que está instalado, usarlo es solo cuestión de colocar el cursor en algún lugar del párrafo que desea alinear y ejecutar:

:Tab /=


Esta no es la forma más fácil de hacer las cosas, pero se puede hacer sin ningún complemento.

  • Use V y :s/=/ =/ para insertar un grupo de espacios antes de cada signo igual.
  • Use Ctrl-V para seleccionar la columna en la que desea mover los signos iguales.
  • Presione << a "unindent" en el lado derecho de cada ecuación hacia la columna que seleccionó, luego presione . repetidamente hasta que los signos iguales estén alineados en esa columna.

Instale el complemento Tabular.vim y modifique la esencia por tpope a algo como esto:

inoremap <silent> : :<Esc>:call <SID>align('':'')<CR>a inoremap <silent> = =<Esc>:call <SID>align(''='')<CR>a function! s:align(aa) let p = ''^.*/s''.a:aa.''/s.*$'' if exists('':Tabularize'') && (getline(line(''.'')-1) =~# p || getline(line(''.'')+1) =~# p) let column = strlen(substitute(getline(''.'')[0:col(''.'')],''[^''.a:aa.'']'','''',''g'')) let position = strlen(matchstr(getline(''.'')[0:col(''.'')],''.*''.a:aa.'':/s*/zs.*'')) exec ''Tabularize/''.a:aa.''/l1'' normal! 0 call search(repeat(''[^''.a:aa.'']*''.a:aa,column).''/s/{-/}''.repeat(''.'',position),''ce'',line(''.'')) endif endfunction


Para una solución simple que no implique la instalación de un complemento, simplemente filtre a través del comando de la columna Unix.

Paso uno, filtro a través de la column -t :

:%!column -t

Paso dos, quite el relleno alrededor del delimitador:

:%s/ = /=/

El texto inicial es

$ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main

Después del paso uno se convierte

$ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main

Y después del paso dos

$ = jQuery.sub() Survey = App.Survey Sidebar = App.Sidebar Main = App.Main

Para más información, man column .


Puede usar el complemento Align Vim para alinear dichos bloques, por ejemplo, escribiendo

vip:Align =

en el modo de comando, cuando el cursor se coloca dentro del bloque que se va a alinear.

Donde vip ingresa al modo virtual y selecciona el párrafo actual. El comando Align es bastante potente, por ejemplo, también puede especificar varios patrones, los patrones se interpretan como expresiones regulares, etc.


Un complemento alternativo a Tabular:

https://github.com/tommcdo/vim-lion

De los documentos:

Por ejemplo, glip= girará

$i = 5; $username = ''tommcdo''; $stuff = array(1, 2, 3);

dentro

$i = 5; $username = ''tommcdo''; $stuff = array(1, 2, 3);