2012-01-22 16 views
24

Tiendo a alinear el código en signos iguales para una mejor legibilidad. A partir de esto:Alinear texto en un signo igual con vim

$ = 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 una manera fácil de hacer esto en vim?

Respuesta

33

El mejor complemento que he encontrado hasta ahora es Tabular.vim.

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

Una vez instalado, su uso es sólo una cuestión de poner el cursor en algún lugar del párrafo que desea alinear en marcha:

:Tab /= 
+2

Este plugin funciona muy bien! También puede escribir Tab mientras está en modo visual para alinear el texto resaltado. – ericraio

13

Creo que esto se hace fácilmente con el complemento Tabular. Here it is in action.

Seleccione el rango en el modo visual (en realidad no es necesario), y hacer:

:Tabularize /= 

El plug-in en realidad puede encontrar el rango correcto en su propia frecuencia, sin necesidad de seleccionarlo visualmente o especificar un rango al ex comando.

10

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

  • Uso V y :s/=/ =/ para insertar un montón de espacios antes de cada signo igual.
  • Use Ctrl-V para seleccionar la columna en la que desea que se muevan los signos iguales.
  • Presione << para "desindentar" 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.
4

Un plugin de alternativa a tabular:

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

A partir de los documentos:

Por ejemplo, se volverá glip=

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

en

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

Puede utilizar la Align Vim plugin para alinear dichos bloques, por ejemplo escribiendo

vip:Align = 

en 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, p. también se puede especificar varios patrones, los patrones se interpretan como expresiones regulares etc.

1

Instalar tabularize plugin y modificar lo esencial 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 
Cuestiones relacionadas