66

当我编写 Javascript 时,我使用分号。但是,当我在 webstorm/phpstorm 中编写时,它会自动完成大括号和方括号,但不会自动添加分号。我知道这不是标准等要求的,但这就是我编码的方式——而且我并不孤单,很多人都这样编码。

例子:

var data = $.ajax({});

通常,webstorm/phpstorm 会这样做,并将光标留在花括号内:

var data = $.ajax({})

正如我在第一个示例中所指出的那样,我想要的就是不必手动添加分号并让它自动完成。

4

13 回答 13

99

没有办法自动插入,需要使用Complete Statement动作(Ctrl++ ShiftEnter

您还需要检查设置(macOS 上的首选项)| 编辑 | 代码风格 | JavaScript | 标点 | 使用分号终止语句选项已启用。

于 2012-08-04T02:17:18.750 回答
12

您可以制作宏和键盘快捷键:

Record Auto semicolon macro and bind shortcut to it:
1. Edit -> Macros -> Start Macro Recording
2. In the editor go to the end of line by pressing End
3. put semicolon ';'
4. Edit -> Macros -> Stop Macro Recording
5. Give a name, for example 'Auto semicolon'
6. Open settings (Ctrl + Alt + s), select Keymap
7. Expand Macros node
8. Select 'Auto semicolon', in the context menu choose Add Keyboard Shortcut
9. Set Ctrl + ; as First keystroke
10. Save/Apply settings
11. Enjoy!
12. Try it out, in the middle of code line, hit Ctrl + ;
 
// some useful combinations:
Ctrl + ,    put colon at the end of line
Ctrl + ;    put semicolon at the end of line
Ctrl + .    put => at the end of line

来自https://gist.github.com/umidjons/9383758

如果有一个选项可以自动执行它会更酷......

于 2014-10-29T07:15:02.357 回答
8

对于 IntelliJ Idea 2018,请按照以下步骤操作:

  • 打开设置:Ctrl+ Alt+S
  • 编辑器>代码样式>JavaScript
  • 选择选项卡 > 标点符号
  • 在下拉列表中,选择“使用/始终使用”分号来终止语句
  • 申请并确定

这将在 JS 中添加额外的分号。

于 2019-04-30T10:32:12.103 回答
7

您可以自动让 webstorm 或 phpstorm 为您添加分号。

这是 webstorm 的方法:

首选项 --> 编辑器 --> 代码样式 --> Javascript --> 标点符号

在分号中终止语句,选择 always。

然后,无论何时格式化代码,使用快捷键 OPTION+CMD+L 都会添加分号

您还可以将重新格式化配置为在保存时自动进行。这样分号总是会被添加。

于 2019-10-24T10:47:28.567 回答
6

我想做的事

我的目标是在当前行的末尾添加一个分号,同时将光标位置保持在行的中间。

例如

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([{''}])出现),输入快捷方式(例如选项分号),分号将出现在行尾,但您的光标将保持在原来的位置。

警告

这个解决方案有点小技巧,因为在插入然后删除垃圾文本时,显示确实会跳动一点。但是,至少它有效。如果有人能弄清楚如何在不需要垃圾标记文本的情况下实现相同的最终目标,那就太好了。

于 2016-07-01T20:47:18.843 回答
1

在我看来,每次都必须按 Ctrl+Shift+Enter 然后回到括号中并不是一个解决方案。

这是一个真正的解决方案:

当您按下“Shift+9”时,您通常希望在语句末尾使用分号,对吗?无需每次都在键盘上敲击其他疯狂的组合。

  1. 在编辑器中输入一个函数;
  2. 就在您输入“(”之前,转到编辑 > 宏 > 开始宏录制;
  3. 输入“();”并按“左”键 2 次,这样你就回到了里面;
  4. 转到编辑 > 宏 > 开始宏录制并将其命名(例如自动分号;5 转到首选项 > 外观和行为 > 键盘映射 > 宏并右键单击“自动分号”,选择添加键盘快捷键并按“Shift+9” ;
  5. 退出首选项并返回编辑器进行测试!

您可以根据自己的需要制作许多品种。例如,在 '({})' 之间添加大括号,或者如果您更频繁地使用 '()' 而无需在末尾使用分号,则可以将快捷方式更改为 'Ctrl+Shift+9',通常组合只是添加常规。你的喜好!

于 2015-02-18T12:46:03.353 回答
1

你可以使用这个https://github.com/yyx990803/semi。提供 cli 和 api 以满足您的需求。

于 2016-10-20T10:46:55.083 回答
1

您可以使用eslint

"semi"规则设置为"error"2

在要添加分号的文件中右键单击,然后Fix ESLint Problems在菜单底部附近选择

右键菜单

于 2018-07-26T19:16:36.230 回答
0

是的,如果你离开它没有分号,Webstorm 会将它标记为unterminated statement并突出显示它。当您在线(使用光标)作为右括号时,只需键入:

Alt + Enter

这将调出灯泡菜单(自动更正或更改内容,我没有更好的名称)。

希望如果您的代码是正确的,或者大括号是该行中唯一的符号,那么您唯一的选择就是Terminate statement它会自动聚焦,因此只需按 Webstorm 的 Enter 键添加分号。

这种方式使您免于手动定位光标并自己键入分号,但只需以某种方式在该行上,然后执行 alt+enter+ enter 即可。

是的,它不会自动出现,但它更快更容易。

于 2013-10-11T16:49:27.640 回答
0

通常,webstorm/phpstorm 会这样做,并将光标留在花括号内:

End仍然需要手动操作,但我;每次都会打。但是Ctrl+Right也应该起作用,这些键触手可及。

我在每一行之后不断点击CTRL+S以保存文档,所以这对我来说只是一个小麻烦..

于 2015-01-12T14:57:24.063 回答
0

创建一个宏以移动到行尾并插入分号。然后将宏分配给分号按键。因此,在您键入的任何时候,您都可以终止代码行。

于 2015-03-21T21:09:41.687 回答
0

在最新的2020.3你可以在这里找到这个:

在此处输入图像描述

于 2020-12-27T07:30:09.193 回答
0

对于 Webstorm 2019.1

1 选择文件/设置...菜单。
2 在设置对话框的左侧栏中选择编辑器/代码样式/JavaScript。

在此处输入图像描述

3 选择标点符号选项卡并确保“分号终止语句”选项为“始终”。

在此处输入图像描述

4 从菜单中选择代码/重新格式化。

于 2021-12-21T02:48:07.823 回答