Du musst dem Charakter entkommen~
:
if str =~ '\~/dir1'
Das :help E33
erklärt das Problem schon sehr gut:
E33 Kein vorheriger regulärer Ausdruck
Wenn Sie das Zeichen "~" in einem Muster verwenden, wird es durch das zuvor verwendete Muster in einem Befehl ": substituieren" ersetzt. Dies schlägt fehl, wenn noch kein solcher Befehl verwendet wurde. Siehe | / ~ |. Dies geschieht auch bei der Verwendung von ": s / pat /% /", wobei "%" für die vorherige Ersatzzeichenfolge steht.
Zusätzliche Kritik
- Sie wollen wahrscheinlich zu verankern, um das Spiel zu Beginn:
str =~ '^\~/dir1'
. Wahrscheinlich auch am Ende ein Pfadtrennzeichen setzen:,str =~ '^\~dir1/
oder~/dir10/file
würde sonst auch als innen gezähltdir1
! - Der
=~
Übereinstimmungsoperator (wie der Literalvergleich==
) gehorcht der'ignorecase'
Einstellung. Daher ist es ratsam, den Vergleich über den Wert von=~#
oder unabhängig vom aktuellen Wert dieser Option zu machen=~?
. - Wenn Sie keine spezielle Schlüsselnotation verwenden müssen, ist es besser, einfache Anführungszeichen zu verwenden
'string'
, da der Backslash dort keine besondere Bedeutung hat und nicht erneut maskiert werden muss. - Sie sollten Ihre
:autocmd
in ein einwickeln:augroup
; Ohne diese Option~/.vimrc
wird bei jedem erneuten Laden ein weiterer Lauf hinzugefügt:
augroup SayLocation autocmd! " Clear existing autocmd BufEnter * ... augroup END