Вам нужно убежать от ~
персонажа:
if str =~ '\~/dir1'
:help E33
Уже объясняет проблему очень хорошо:
E33 Нет предыдущего замещающего регулярного выражения
При использовании символа '~' в шаблоне он заменяется ранее использованным шаблоном в команде ": substitute". Это терпит неудачу, когда такая команда еще не использовалась. Смотрите | / ~ |. Это также происходит при использовании «: s / pat /% /», где «%» обозначает предыдущую замещающую строку.
Дополнительная критика
- Вы, вероятно, хотите привязать матч к началу
str =~ '^\~/dir1'
. Возможно также установить разделитель пути в конце:,str =~ '^\~dir1/
иначе~/dir10/file
также будет учитываться как внутриdir1
! - Оператор
=~
сопоставления (как и буквальное==
сравнение) подчиняется'ignorecase'
настройке. Поэтому желательно, чтобы сделать сравнения независимо от текущего значения этого опциона либо через=~#
или=~?
. - Если вам не нужно использовать специальные обозначения клавиш, лучше использовать одинарные кавычки
'string'
, потому что обратная косая черта там не имеет особого значения и не нуждается в экранировании (еще раз). - Вы должны завернуть
:autocmd
в:augroup
; без этого каждая перезагрузка~/.vimrc
добавит еще один прогон:
augroup SayLocation autocmd! " Clear existing autocmd BufEnter * ... augroup END