Como corretamente vim-escape uma variável / registro

5

Por exemplo, quero destacar ocorrências do registro atual de yank, ou seja,

:let @/=@"

Funciona, a menos que @" tenha coisas "engraçadas" como barra invertida.

Eu posso fazer

:let @/=escape(@", '\')

mas não tenho certeza se essa é a coisa certa a fazer, e se ela escapará de todos possíveis caracteres problemáticos. Talvez existam outros.

Atualização: ok, eu realmente preciso escapar de mais coisas. todos os caracteres especiais regentes, pelo menos, parece. então existe uma função ou variável de escape regexp listando todos os caracteres especiais regexp?

    
por Vitaly Kushner 08.08.2011 / 13:32

1 resposta

3

Eu não acho que exista essa lista. Aqui está a função de escape que usei por um bom tempo como parte de uma macro para procurar a string atualmente selecionada:

escape(@", '\/.*$^~[]')

Editar:

A resposta original teve argumentos extras devido à minha cópia muito do meu ~ / .vimrc. Aqui está o mapeamento em que eu usei essa fuga no caso de ter esse contexto pode ajudar. Destacar algum texto e digitar * procura a próxima ocorrência desse texto. (Mapeamento originalmente escrito por Jürgen Krämer.)


vnoremap <silent> * :<C-U>
          \let old_reg=getreg('"')<bar>
          \let old_regmode=getregtype('"')<cr>
          \gvy/<C-R><C-R>=substitute(
          \escape(@", '\/.*$^~[]'), '\n', '\n', 'g')<cr><cr>
          \:call setreg('"', old_reg, old_regmode)<cr>

    
por 08.08.2011 / 18:53