在linter提供程序中,我收到错误发生的Point compatible array(行,列)。现在我想强调围绕这一点的词,基本上是如果在编辑器中双击那个确切的点就会得到的结果。像
这样的东西const range = textEditor.getWordAtPosition(point)
是我希望的,但在文档中找不到。 谢谢你的帮助!
答案 0 :(得分:1)
在环顾四周之后,似乎没有针对给定需求的API方法。我最终写了一个基于this answer的小辅助函数:
function getWordAtPosition(line, pos) {
// Perform type conversions.
line = String(line);
pos = Number(pos) >>> 0;
// Search for the word's beginning and end.
const left = Math.max.apply(null, [/\((?=[^(]*$)/,/\)(?=[^)]*$)/, /\,(?=[^,]*$)/, /\[(?=[^[]*$)/, /\](?=[^]]*$)/, /\;(?=[^;]*$)/, /\.(?=[^.]*$)/, /\s(?=[^\s]*$)/].map(x => line.slice(0, pos).search(x))) + 1
let right = line.slice(pos).search(/\s|\(|\)|\,|\.|\[|\]|\;/)
// The last word in the string is a special case.
if (right < 0) {
right = line.length - 1
}
// Return the word, using the located bounds to extract it from the string.
return str.slice(left, right + pos)
}
这里,单词的开头由其中一个字符(),。[]的最新出现确定。或者一片空白。
单词的结尾由相同的字符决定,但是这里首先出现的是一个分隔符。
给定原始上下文,可以使用API方法::lineTextForBufferRow和所需的位置(列)调用该函数,如下所示:
const range = getWordAtPosition(textEditor.lineTextForBufferRow(bufferRow), 10)