我想做的事
我的目标是在当前行的末尾添加一个分号,同时将光标位置保持在行的中间。
例如
func([{''}])
// /\
// ||
// ||
// current cursor position
//
// Now I want to add a semi-colon to the end-of-the-line
// but then continue typing my string contents at the same
// cursor location. i.e. I now want this, with as few
// keystrokes as possible:
//
// Add this semi-colon...
// |
// |
// V
func([{''}]);
// /\
// ||
// ||
// ...while maintaining this cursor position
为什么我想这样做
WebStorm 在我输入时很好地“完成”了标点符号,即在我输入之后({['
,它会自动完成到({[' <<cursor here>> ']})
. 我想确保在输入更多内容之前在行尾包含分号,因为我以后可能会忘记。但是,添加分号后,我想在当前光标位置继续输入。我知道我可以使用自动完成在行尾添加一个分号,但这会将光标留在行尾,迫使我多次点击后退箭头。此外,有时我的半完成行还不是正确的 JavaScript 语法,所以自动完成甚至可能不起作用。
为什么很难
解决方案似乎很简单:编写一个简单的宏来跳转到行尾,输入一个分号,然后返回到我原来的位置。问题是,很难弄清楚如何哄 WebStorm 回到我原来的位置!我尝试设置书签,转到行尾,输入分号,然后返回我的书签,但这不起作用,因为据我所知,书签只记住行,而不是列。我尝试首先在当前位置(例如xcursorx
)输入垃圾标记文本,转到行尾,输入分号,然后做一个简单find
的垃圾标记文本,但这也不起作用,因为 WebStorm 的宏似乎没有很好地在find
例程中输入文本。我尝试先输入垃圾标记文本,然后转到行尾,Navigate/Last Edit Location
并删除垃圾,但这也不起作用。
最终奏效的方法
我制作了一个宏,如下所示(各个步骤中显示的键盘快捷键是“Mac OS X 10.5+”键盘映射中的快捷键...使用适合您设置的快捷键或菜单选项):
- 从所需位置的光标/插入符号开始,开始录制宏(即
Edit > Macros > Start Macro Recording
)
- 键入单个非空格/非单词字符,例如句点
- 紧接着,输入一个你不会在其他地方使用的垃圾标记文本“单词”,例如“xcursorx”
- 紧接着,输入另一个非空格/非单词字符,例如另一个句点(即您现在输入了“.xcursorx”)
- 跳到行尾(例如命令右箭头)
- 输入分号
- 在分号之后(即没有空格),再次键入垃圾标记文本的相同单个“单词”,但没有侧面的非空格/非单词字符,例如键入“;xcursorx”
- 将光标向后移动一个“单词”(例如选项左箭头)
- 找到光标处的单词(即
Edit > Find > Find Word at Caret
)(手动输入“xcursorx”时不要使用正常)find
- 删除选定的文本(即按删除或退格键删除行尾的第二个“xcursorx”)
- 查找上次选择的文本的上一次出现(即
Edit > Find > Find Previous/Move to Previous Occurrence
或 shift-command-G);这将选择“.xcursorx”中的“xcursorx”。
- 删除选定的文本(即按删除或退格键)
- 前进一个字符(即右箭头,到第二个句号之后)
- 删除两个字符(即按两次删除或退格键,删除两个句点)
- 停止宏录制(即
Edit > Macros > Stop Macro Recording
)
- 给你的宏起个名字(例如'place-semicolon-at-end-of-line')
- 给你的宏一个键盘快捷键(例如
Preferences > (scroll down to) Macros > place-semicolon-at-end-of-line > (right click) > Add Keyboard Shortcut
......并输入你想要的快捷键,例如选项分号)
一些晦涩步骤的解释
对于某些用例,并非所有上述步骤都是必需的。例如,不需要添加额外的句点来在顶部的示例中使用func([{''}])
. 但是,某些边缘情况需要额外的步骤,例如,如果您的光标已经位于行尾。
如何使用它
要使用宏,请从正常输入开始(在顶部的示例中,输入func([{'
导致func([{''}])
出现),输入快捷方式(例如选项分号),分号将出现在行尾,但您的光标将保持在原来的位置。
警告
这个解决方案有点小技巧,因为在插入然后删除垃圾文本时,显示确实会跳动一点。但是,至少它有效。如果有人能弄清楚如何在不需要垃圾标记文本的情况下实现相同的最终目标,那就太好了。