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/filetambé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
:autocmdem:augroup; sem isso, cada recarregamento de~/.vimrcadicionará outra execução:
augroup SayLocation
autocmd! " Clear existing
autocmd BufEnter * ...
augroup END