Em uma função vimscript, preciso atribuir uma string correspondente a uma variável l:matched
após a chamada search()
e estou me perguntando se existe uma maneira mais curta do que o que estou fazendo atualmente:
let l:pattern = '\v^Foo: \zs.*'
let l:line = search(l:pattern)
let l:line_text = getline(l:line)
let l:matched = matchstr(l:line, l:pattern)
Idealmente, eu gostaria de algo como
let l:matched = search_text(l:pattern)
sem recorrer a getline()
. Existe uma função do vim que pareço incapaz de encontrar?
l:
declaração do espaço para nome.:let @/="pattern" | norm! ygn
e ter o conteúdo do registro 0 disponível.Respostas:
Como o cursor está colocado na 1ª letra da partida, você provavelmente poderá fazer um
:normal! y$
após a pesquisa e obter o conteúdo do registro em sua variável local.Outra abordagem, que eu acho que funcionaria muito bem aqui, seria usar
:substitute
com an
flag (ou seja, sem uma substituição real ):... e você chama assim:
Isso praticamente cria
ActOn
uma função de retorno de chamada - ela será avaliada para cada correspondência.fonte
:s
com uman
subexposição -expressão e o sinalizador está disponível apenas desde o Vim 7.3.627+. Caso contrário, você precisará fazer uma substituição realmente (coxo, pois isso marcará o buffer como modificado). Você provavelmente também deseja salvar e restaurar o registro de pesquisa@/
ou usar:keeppatterns
.keeppaterns
->keeppatterns
. Está causando oE488: Trailing characters
que é bastante complicado rastrear de volta à causa. Obrigado!