雖然你可以用負向預測來做你想要的,但我不認爲你需要它,你可以簡單地使用零寬度原子\>
(參見:h /\>
)來描述單詞的結尾。
\>
表示前一個字符是單詞的最後一個字符(技術上說,是緩衝區本地選項'iskeyword'
內的最後一個字符)。
至於案例問題,您可以使用捕獲組(請參閱:h /\(
)來捕獲fall
和out
,以便您可以在替換命令的替換部分中引用它們。
它將給:
:%s/\v\c<(fall)\s+(out)>/\1\2/g
斷下來了一點:
┌──────── capture `fall`
│ ┌ capture `out`
┌────┤ ┌───┤
%s/\v\c<(fall)\s+(out)>/\1\2/g
│ │
│ └─ use the text from the 2nd capturing group (will preserve the case)
└─ use the text from the 1st capturing group (will preserve the case)
\s+
描述的空白字符(至少一個)的序列。 \c
將使模式不區分大小寫,並且\v
啓用非常神奇的模式。沒有它,你將不得不逃脫模式中的幾個原子/量詞。
編輯:
:%s/\v\c<fall\zs\s+\zeout>//g
拆毀了:
其實,你可以通過只刪除空白的序列簡化命令
%s/\v\c<fall\zs\s+\zeout>//g
│ │
│ └─ sets the end of the match
└─ sets the start of the match
這個時候,你用原子\zs
和\ze
來設置匹配的開始和結束。有關更多信息,請參見:h /\zs
和:h /\ze
。
用np ++例如使用['\ bfall out \ b'](https://regex101.com/r/NlgKPG/1)。如果感興趣,請參閱[SO關於*字界線的文檔](https://stackoverflow.com/documentation/regex/1539/word-boundary#t=201707302028316100317)。 –