¿Las primeras y últimas 5 líneas de un archivo? Usar para la lista de ignorar hechizos específicos del archivo?

8

Me ha llegado el rumor de que es posible colocar vimcomandos en las primeras cinco o en las últimas cinco líneas de un archivo. Pero no pude encontrar esto en Google. Cualquier ventaja sería apreciada.

Me pregunto si sería posible emplear esta función para definir adiciones específicas de archivos a la lista de palabras.

Editar Gracias! El modelinees! ¿Se puede usar para la corrección ortográfica de la manera sugerida?

Yossi Gil
fuente
44
¿Quieres decir algo más que un modeline?
muru
2
echar un vistazo a superuser.com/questions/641946/...
JJoao

Respuestas:

8

Las modelinas pueden parecer una forma de hacer esto, pero desafortunadamente no funcionarán. ModeLines únicas opciones de ajuste de soporte ( shiftwidth, colorcolumny ese tipo de cosas). Puede usar una línea de modelo como vim: spellpara habilitar la corrección ortográfica de un documento. Sin embargo, spellgood!es un comando Ex, no una opción. Además, específicamente no puede establecer algunas opciones (incluidas spellfile, ver :help spellfile) de modelines por razones de seguridad.

Usted podría diseñar un montón de autocommands específicos archivo en su vimrc, pero que sería llegar a ser realmente difícil de mantener en el tiempo, tediosa si alguna vez sucede que tiene dos archivos con el mismo nombre en diferentes lugares, y ¿No viaje "con el archivo."

En cambio, la mejor solución es probablemente construir su propia característica tipo línea de modo para agregar palabras analizando algún bloque de texto definido en el documento. Por ejemplo, puede buscar líneas que comiencen "spellgood:"y agregar automáticamente el conjunto de palabras delimitadas por espacios a la lista interna de palabras:

function! AddLocalSpelling ()
  " Save the cursor position.
  let cursor_position = getcurpos()

  let location = searchpos("\"spellgood:", "c")
  while location != [0, 0]
    let words = split(getline(location[0]))
    " The first 'word' will be the sentinel token itself (unless)
    " we found the token in an embedded string or comment...
    if words[0] == "\"spellgood:"
      call remove(words, 0)
      for word in words
        execute "silent spellgood! " . word
      endfor
    endif
    let location = searchpos("\"spellgood:", "W")
  endwhile

  " Restore cursor position.
  call setpos(".", cursor_position)
endfunction

Luego puede configurar un autocomando para, digamos BufReadPost * call AddLocalSpelling()en su .vimrc. En la práctica, es probable que desee hacer que la función anterior sea más robusta frente a los errores, y posiblemente usar commentspara ver qué es un token de comentario válido (elegí "porque probé esto en un búfer VimL). Esta respuesta de SuperUsuario vinculada por JJoao en los comentarios proporciona una implementación similar pero alternativa que le permite usar bloques de palabras en lugar de una sola línea a la vez.

Este método requerirá que otros usen la misma función o al menos estén de acuerdo con las mismas reglas de análisis, por lo que no es perfecto. Pero podría tomarlo y promover la funcionalidad a un complemento si así lo desea, permitiendo un acceso más fácil para otros usuarios.

Comunidad
fuente