key-bindings – Agregue automáticamente un "o" de cierre al insertar uno, pero solo si el cursor no está dentro de una cadena ya

Pregunta:

vimrc asignaciones en mi vimrc para ingresar automáticamente paréntesis cerrados y llaves cuando entro a abrir con inoremap ( ()<esc>i .

Me gustaría hacer lo mismo para " y ' , pero solo cuando el cursor actualmente no está dentro de una cadena, ya que dentro de una cadena ' probablemente sea un apóstrofo en lugar de un delimitador de cadena. ¿Cómo puedo hacer esto?

Respuesta:

Un enfoque podría ser utilizar funciones syn* . Algo como:

fun! Qtx(qt)
    let x = synIDattr(synIDtrans(synID(line("."), col("."), 1)), "name")
    if x != "String" && x != "Comment" && x != "Constant"
        return a:qt . a:qt
    endif
    return a:qt
endfun


inoremap <silent> <expr> ' Qtx("'")
inoremap <silent> <expr> " Qtx('"')

La idea es aprovechar la sintaxis del búfer en la posición del cursor. Quizás esto pueda resolverse mejor. Pero espero que sea un comienzo.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım