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);