Você precisa escapar do caractere ~
:
if str =~ '\~/dir1'
O :help E33
já explica muito bem o problema:
E33 No previous substitute regular expression
When using the '~' character in a pattern, it is replaced with the previously used pattern in a ":substitute" command. This fails when no such command has been used yet. See |/~|. This also happens when using ":s/pat/%/", where the "%" stands for the previous substitute string.
Crítica adicional
- Você provavelmente deseja ancorar a correspondência ao início:
str =~ '^\~/dir1'
. Provavelmente, também defina um separador de caminho no final:str =~ '^\~dir1/
, senão~/dir10/file
também seria contado comodir1
! - O operador
=~
match (como a comparação literal==
) obedece à configuração'ignorecase'
. Portanto, é aconselhável tornar a comparação independente do valor atual dessa opção via=~#
ou=~?
. - A menos que você precise usar a notação de chave especial, é melhor usar aspas simples
'string'
, porque a barra invertida não tem nenhum significado especial e não precisa ser escapada (mais uma vez). - Você deve agrupar seu
:autocmd
em:augroup
; sem isso, cada recarregamento de~/.vimrc
adicionará outra execução:
augroup SayLocation
autocmd! " Clear existing
autocmd BufEnter * ...
augroup END