Van*_*ert 2 visual-studio-code vscode-extensions
继续关注有关使用 VS Code API进行 VS Code 扩展的尚未解答的问题。我没有回答,因为它特别要求使用对象的方法来解决。我无法做到这一点,也无法循环遍历对象来获取最后一个字符。尝试操作选择也不起作用,因为执行开发主机开始运行后似乎不会反映窗口中的实际选择。我能找到的唯一解决方案是下面的跳环练习,它获取一行的第一个字符和下一行的第一个字符,设置一个范围,获取该范围的文本,然后减少该文本字符串的长度加 1 即可获取上一行的最后一个字符。withPositionvscode.commands.executeCommandvscode.window.activeTextEditor
function getCursorPosition() {
const position = editor.selection.active;
curPos = selection.start;
return curPos;
}
curPos = getCursorPosition();
var curLineStart = new vscode.Position(curPos.line, 0);
var nextLineStart = new vscode.Position(curPos.line + 1, 0);
var rangeWithFirstCharOfNextLine = new vscode.Range( curLineStart, nextLineStart);
var contentWithFirstCharOfNextLine = editor.document.getText(rangeWithFirstCharOfNextLine);
var firstLineLength = contentWithFirstCharOfNextLine.length - 1;
var curLinePos = new vscode.Position(curPos.line, firstLineLength);
var curLineEndPos = curLinePos.character;
console.log('curLineEndPos :>> ' + curLineEndPos);
Run Code Online (Sandbox Code Playgroud)
我显然错过了一些东西 - 使用 VSCode API 获取一行的最后一个字符而不用像这样的米老鼠鼠标是不可能的。所以问题很简单,正确的方法是什么?
一旦你有了光标,Position函数TextDocument.lineAt()就会返回一个TextLine. 您可以从中获取它range,这range.end.character将为您提供最后一个字符的字符号。- 不包括换行符,如果您想包含该换行符,请参阅TextLine.rangeIncludingLineBreak()。
const editor = vscode.window.activeTextEditor;
const document = editor.document;
const cursorPos = editor.selection.active;
document.lineAt(cursorPos).range.end.character;
Run Code Online (Sandbox Code Playgroud)
注(来自[TextDocument.lineAt documentation][1] ):
返回由位置表示的文本行。请注意,返回的对象不是实时的,并且不会反映对文档的更改。
| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |