2014-11-06 89 views
0

有誰知道如何使用match()創建向後搜索字符串?向後搜索字符串

word1 word2 word3 word4 
      ^

^ =光標位置)

我想找到光標(字詞)前的單詞的開始和結束列。

我想這正則表達式沒有成功:

match(getline('.'), '?\w\ze\s', col('.')-1) 

是否?不是一個字符串工作向後搜索

回答

2

你混淆了正常的命令?與功能match()這對字符串工作。你實際上正在尋找的是searchpos()函數,它在緩衝區中搜索一些模式,並讓你返回位置。

let [start_line, start_col] = searchpos('\<\w\+\>', 'bn') 
let [end_line, end_col] = searchpos('\<\w\+\>', 'bne') 

這些標誌的含義如下:

  • b向後
  • n不移動光標
  • e使用比賽結束作爲返回的位置

請參閱以下內容瞭解更多信息:

:h search(
:h searchpos(
+0

非常感謝。我試過了searchpos()。我注意到,如果這個字符位於一個單詞的末尾(與search()相同的問題),它不會識別字符爲[èéìòù]。這就是爲什麼我切換到match()/ matchend()。 – Reman 2014-11-06 20:06:14

+0

你可以使用字符類。例如'[[:alnum:] _] \ +'。有關更多信息,請參閱':h/[]'。 – 2014-11-06 20:18:09