如何使用打字稿替换 Ace 编辑器中的一行?
How to replace one line in Ace editor using typescript?
我的问题是我有一个 WEB 应用程序,我正在使用 angularjs 4
的打字稿
我需要做一个keyEvent之类的,每次我在任何地方输入小注释('//')时,我需要将它们替换为大注释('/* XXX */')和光标应放在它们之间(标有字符 XXX)
我到目前为止,能够从编辑器中读取行,并编辑注释,但是替换行时出现问题,我不知道为什么,因为有控制台上没有错误。
代码如下:
@HostListener( 'window:keydown', ['$event'] ) keyboardInput( e: any ) {
if ( e.key === '/' && this.globalService.mode === 'EDIT' ) {
this.backslashCounter++;
const column = this.globalService.editor.getEditor().session.selection.selectionAnchor.column;
const row = this.globalService.editor.getEditor().session.selection.selectionAnchor.row;
this.currentLine = '' + this.globalService.editor.getEditor().session.selection.doc.getLines( row, row );
if ( this.backslashCounter === 2 ) {
if ( this.currentLine.substr( column - 1, 1 ) === '/' ) {
// e.preventDefault();
// e.stopPropagation();
this.backslashCounter = 0;
currentLine = this.removeSmallCommentsWithBigOnes(currentLine);
const editor = this.globalService.editor.getEditor();
const range = this.globalService.editor.getEditor().session.selection.getRange();
range.start.column = 0;
range.end.column = currentLine.length + 5;
editor.replace( range, currentLine ); // THIS LINE HERE DOES NOT WORK!!!!!!!!!!!!!!!!
this.globalService.editor.getEditor().session.selection.moveTo( row, column + 2 ); // this line sets the selection back to the right position in the middle of the big comments (or it should, did not have a chance to see :))
} else {
this.backslashCounter--;
}
}
}
}
因此,代码执行以下操作:
首先 IF,检查按下的键是否是 '/' 键
第二个IF,检查是否有2个,
第三个IF,检查它们是否彼此相邻,如果不是,则计数器减1
现在我标记了在 JAVASCRIPT 中有效但在 TYPESCRIPT 中无效的行,请帮忙。
也许还有一个更好的方法来获取当前行和行,因为,这只有在我用鼠标直接点击我想写评论的地方时才有效,但如果我移动带有箭头按钮的光标。
谢谢。
您需要使用 editor.session.replace
而不是 editor.replace
,editor.replace
做其他事情。
我的问题是我有一个 WEB 应用程序,我正在使用 angularjs 4
的打字稿我需要做一个keyEvent之类的,每次我在任何地方输入小注释('//')时,我需要将它们替换为大注释('/* XXX */')和光标应放在它们之间(标有字符 XXX)
我到目前为止,能够从编辑器中读取行,并编辑注释,但是替换行时出现问题,我不知道为什么,因为有控制台上没有错误。
代码如下:
@HostListener( 'window:keydown', ['$event'] ) keyboardInput( e: any ) {
if ( e.key === '/' && this.globalService.mode === 'EDIT' ) {
this.backslashCounter++;
const column = this.globalService.editor.getEditor().session.selection.selectionAnchor.column;
const row = this.globalService.editor.getEditor().session.selection.selectionAnchor.row;
this.currentLine = '' + this.globalService.editor.getEditor().session.selection.doc.getLines( row, row );
if ( this.backslashCounter === 2 ) {
if ( this.currentLine.substr( column - 1, 1 ) === '/' ) {
// e.preventDefault();
// e.stopPropagation();
this.backslashCounter = 0;
currentLine = this.removeSmallCommentsWithBigOnes(currentLine);
const editor = this.globalService.editor.getEditor();
const range = this.globalService.editor.getEditor().session.selection.getRange();
range.start.column = 0;
range.end.column = currentLine.length + 5;
editor.replace( range, currentLine ); // THIS LINE HERE DOES NOT WORK!!!!!!!!!!!!!!!!
this.globalService.editor.getEditor().session.selection.moveTo( row, column + 2 ); // this line sets the selection back to the right position in the middle of the big comments (or it should, did not have a chance to see :))
} else {
this.backslashCounter--;
}
}
}
}
因此,代码执行以下操作: 首先 IF,检查按下的键是否是 '/' 键
第二个IF,检查是否有2个,
第三个IF,检查它们是否彼此相邻,如果不是,则计数器减1
现在我标记了在 JAVASCRIPT 中有效但在 TYPESCRIPT 中无效的行,请帮忙。
也许还有一个更好的方法来获取当前行和行,因为,这只有在我用鼠标直接点击我想写评论的地方时才有效,但如果我移动带有箭头按钮的光标。
谢谢。
您需要使用 editor.session.replace
而不是 editor.replace
,editor.replace
做其他事情。