joedicastro / dotfiles

My .dotfiles
586 stars 80 forks source link

Sugerencias y pequeños problemas #6

Closed aaloy closed 11 years ago

aaloy commented 11 years ago

Hola,

Tras un par de días con la configuración por defecto:

  1. He tenido que cambiar a nowrap el html ya que se emperraba en hacer saltos de línea al mínimo cambio. Yo configuraría el nowrap para todo lo que no sea txt, rest o markdown.
  2. Editar la linea final es un problema. Normalmente hacía un insert en la última línea y podía empezar a trabajar. ahora el insert se queda en la posición del carácter anterior. El workarround es utilizar a para insertar, pero no me acaba de gustar ya que lo veo como una pega.
  3. Plegado de código. Soy de los de vistazo rápido y tenerlo todo a mano. El plegado por defecto particularmente me resulta un engorro. Entiendo que es una opción personal.
  4. Me he tenido que hacer una chuleta para poder seleccionar las opciones de autocompletado :) tengo tenencia a utilizar los cursores o las flechas de navegación de vim.

sigo pensando en más cosas, por si te aburres ... :D

joedicastro commented 11 years ago
  1. Mmmm, prefiero dejarlo por defecto y configurarlo ex-profeso para cada formato... pero déjame darle una pensada... a ver como intento hacer algo intermedio.
  2. Un ejemplo para ilustrarlo? es que no acabo de entenderlo bien, ¿la última línea? te refieres a la ultima columna? Si te refieres a la ultima columna, es muy fácil de solucionar, añades esto al vimrc (lo pienso añadir en un commit)

    " para poder editar en todas las columnas donde no hay texto o 
    " virtualedit=onemore para poder editar un solo carácter mas a 
    " final de linea (una columna mas)
    set virtualedit=all
  3. Yo lo prefiero así, pero bueno, solo habría que añadir una linea para tenerlos todos desplegados por defecto (python incluido)

    set foldlevel=100
  4. Los atajos de teclado empleados son muy estándar y no solo en Vim, te servirán en otros programas también. Lo de desactivar las flechas de navegación tiene su cometido, forzarte a aprender el modo de trabajar de Vim, al final se agradece, tanto que para mi es una de las principales barreras para usar otras alternativas como Emacs. Aprender a usar Vim de la manera adecuada tiene un costo, pero las recompensas son grandes. Cuando tengo que usar otro editor y me veo obligado a usar las flechas de dirección o el raton me siento como si hubiera cambiado un bisturí por un hacha de silex.

Ahora mismo estoy acabando de traducir todo al Ingles. He acabado todo menos el README que está casi listo. Lo he hecho así por dos razones, homogeneizar mis dotfiles (parte en ingles y parte en español) y conseguir mas difusión, y por lo tanto mas feedback para poder mejorar la configuración. Cuando acabe hago el merge con los últimos cambios aquí realizados y vuelvo al ataque!

Tengo que darle una pensada a como hacer que algunas partes sean fáciles de configurar al "gusto" sin tener que perder el tren de la configuración general. Es decir, poder realizar cambios en la configuración que dependen mucho de mis gustos personales sin afectar a los que puedan haber optado por esta configuración como base. Ya he estado pensando en utilizar ramas de Git o algo parecido.

aaloy commented 11 years ago
  1. Creo que se tiene que distinguir el código del texto. Para mi los saltos de línea automáticos en código molestan más que ayudan.
  2. Perdón, donde dice fila debería decir columna. Efectivamente ese el efecto deseado.

Lo de tener alguna manera de configurar estos pequeños parámetros sin afectar al resto estaría muy bien.

joedicastro commented 11 years ago

Lo de tener alguna manera de configurar estos pequeños parámetros sin afectar al resto estaría muy bien.

Bueno, creo que he hallado la mejor manera de poder tener mi configuración personal a mi gusto, que se puedan aprovechar las lineas generales y al mismo tiempo se puedan modificar esos pequeños detalles que dependen tanto del gusto de cada uno.

He añadido esto al final de mi vimrc (lo pienso añadir en un commit). Lo que hace es cargar un fichero adicional si este existe (lo he llamado ~/.vim/custom.vim pero es configurable). Al cargarse al final, si añadimos aquí opciones nuevas se cargan igualmente en la configuración, y lo más importante, si volvemos a introducir una que ya existe en el vimrc pero con otro valor, esta nueva configuración sobreescribe a la anterior. ¿Que te parece la idea?

" Other Customizations {{{ =====================================================

let g:vimcustomfile = $HOME.'/.vim/custom.vim'

if filereadable(g:vimcustomfile)
    exec 'source '.g:vimcustomfile
endif

" }}}
joedicastro commented 11 years ago

Creo que se tiene que distinguir el código del texto. Para mi los saltos de línea automáticos en código molestan más que ayudan.

Entiendo tu forma de verlo, pero a mi precisamente me gusta que también el código este limitado a 80 caracteres de ancho. Pero no te preocupes, he creado una función para conmutar esto de modo que sea muy sencillo deshabilitarlo.

 function! ToggleWrap()
    if &textwidth == 80
        set textwidth=0
    elseif &textwidth == 0
        set textwidth=80
    endif
endfunction

nmap <Leader>ew :call ToggleWrap()<CR>

Ahora tenemos mapeado a <Leader>ew esta función que nos conmuta entre los dos modos. Si está habilitado el wrapping y llamas a la función verás que el ancho del texto deja de esta limitado a 80 caracteres y ademas visualmente es muy fácil de distinguir porque también desaparece la columna vertical que marca este limite. Está también disponible como entrada del menú edit de Unite y el mapeado anterior (WordFrequency) lo he cambiado a <Leader>wf

De todos modos, si por defecto prefieres tener esto deshabilitado, y siguiendo el camino del comentario anterior, solo tendrías que añadir esto a tu custom.vim:

set textwidth=0
aaloy commented 11 years ago

También me gusta limitar el ancho y la referencia visual es muy buena. Pero como la legibilidad cuenta, y sobre todo con el html, muchas veces es mejor pasarse un poco y dejar la línea legible. Que el editor te cambie solo en el código es un fastidio, ya que cada lenguaje tiene sus propias reglas para indicar que la línea sigue.

Así que realmente separaría también el que se muestre la línea vertical de que salte de línea automáticamente, ya que la referencia en sí es muy útil.

joedicastro commented 11 years ago

Eso es muy fácil @aaloy , basta con cambiar

set colorcolumn=+1

por

set colorcolumn=81

queda listo.

Oido cocina!

Ahora voy a mirar si puedo añadir un indicador del estado del wrapping a la línea de estado.

aaloy commented 11 years ago

:+1:

joedicastro commented 11 years ago

He visto que si que puedo añadir un indicador a la linea de estado para indicar cuando está activo el wrapping o no, pero se me ha ocurrido que seria mas visual y evidente el cambiar el color de la linea vertical que marca el limite, que te parece la idea?

aaloy commented 11 years ago

pues mucho mejor porqué personalmente me gusta tener tener siempre la línea vertical que marca el margen y así además tendríamos una referencia visual completa.

joedicastro commented 11 years ago

Conseguido!

Ahora queda así:

set textwidth=80
set colorcolumn=81

function! ToggleWrap()
    let s:nowrap_cc_bg = [22, '#005f00']
    redir => s:curr_cc_hi
    silent hi ColorColumn
    redir END
    let s:curr_cc_ctermbg = matchstr(s:curr_cc_hi, 'ctermbg=\zs.\{-}\s\ze\1')
    let s:curr_cc_guibg = matchstr(s:curr_cc_hi, 'guibg=\zs.\{-}\_$\ze\1')
    if s:curr_cc_ctermbg != s:nowrap_cc_bg[0]
        let g:curr_cc_ctermbg = s:curr_cc_ctermbg
    endif
    if s:curr_cc_guibg != s:nowrap_cc_bg[1]
        let g:curr_cc_guibg = s:curr_cc_guibg
    endif
    if &textwidth == 80
        set textwidth=0
        exec 'hi ColorColumn ctermbg='.s:nowrap_cc_bg[0].' guibg='.s:nowrap_cc_bg[1]
    elseif &textwidth == 0
        set textwidth=80
        exec 'hi ColorColumn ctermbg='.g:curr_cc_ctermbg.' guibg='.g:curr_cc_guibg
    endif
endfunction

nmap <silent><Leader>ew :call ToggleWrap()<CR>

Ahora al ejecutar la función no solo se conmuta el wrapping, si no que ademas el color de la columna pasa a ser verde cuando esta desactivado y vuelve al color original del esquema de color actual cuando se vuelve a activar. Así queda mucho más claro cuando el ajuste automático de ancho del texto está o no activado.

joedicastro commented 11 years ago

Bueno, ya está todo añadido a la configuración actual después del merge. Cierro el issue.