【问题标题】:Automatically hard wrap lines at column in VSCode在 VSCode 中的列处自动硬换行
【发布时间】:2017-08-24 15:11:40
【问题描述】:

如何在 VSCode 中自动硬换行?我的意思是,如果一行到达指定的列,则自动在最靠近该列的单词边界处插入换行符,而不会越过。 Vim 有一个名为 textwidth 的设置,我喜欢在编辑 Markdown 时使用它。据我所知,它似乎不像 VSCode 那样。它只是有控制软包装的方法。

【问题讨论】:

  • @MableJohn 那是关于 soft 换行(displaying 长缓冲线拆分到多个屏幕行),这个问题是关于 hard i> 换行(修改缓冲区行以给出某个最大行长度)。硬换行可能只影响您当前键入的行,或者可能包括“重排”或“填充”整个段落,以便每一行都尽可能接近目标行长度而不会溢出。

标签: visual-studio-code vscode-settings


【解决方案1】:

VSCode 不支持此功能。但是您可以安装 Rewrap 扩展,它允许您通过按 Alt + Q 来格式化光标当前所在的块。

Rewrap 不需要进一步设置,因为它会读取 VSCode 的设置来获取要中断的列。

Rewrap也支持自动换行(默认关闭):https://github.com/stkb/Rewrap/wiki/Auto-wrap

【讨论】:

  • 将此标记为已接受的答案并编辑以提及它现在支持自动重新包装!
  • 这似乎只适用于block cmets?代码行呢?我尝试了 1.9.1 的最新版本,并且 block cmets 确实会自动包装,但是对于代码行(我使用 C 语言)它不会。
  • 值得一提的是它与 MarkDown 配合得非常好❤
  • 我不能像@YusufHusainy 指出的那样用 ReWrap 包装代码行。
  • stkb.github.io/Rewrap/#/settings-vscode的配置(例如,要换行的列)
【解决方案2】:

很遗憾,VSCode 还没有这个功能。但是,我们仍然可以让它与vim automatic word wrapping 漂亮的功能一样接近。


第一步

我们需要在 VSCode 中设置软自动换行功能。

  1. 通过Code => Preferences => Settings打开VSCode设置。
  2. 添加这 3 行编辑器设置。

    "editor.wordWrap": "wordWrapColumn",
    "editor.wrappingIndent": "same",
    "editor.wordWrapColumn": n
    

    不要忘记将 (n) 更改为您喜欢的列线长度。对我来说,将其设置为 60 会更舒服。

  3. 保存此设置。

这第一步的主要目的是让我们在打字时感觉更舒服,因为我们不需要手动输入 Enter 并看到一长串文字。


第二步

我们需要安装Vim emulation for VSCode并设置vim textwidth

  1. 通过 VSCode 扩展安装 Vim 仿真。
  2. 通过Code => Preferences => Settings打开VSCode设置。
  3. 添加这行vim设置。

    "vim.textwidth": n,
    

    不要忘记将 (n) 更改为您喜欢的列线长度。对我来说,我会在第一步中将其设置为与 (n) 相同。

  4. 保存此设置。


实际使用

完成整个文档的编写后,您可以使用这种方式将其格式化为硬换行。

  1. 使用视觉线模式(Shift + v)阻止所有文本
  2. 输入 'gq'

【讨论】:

  • 你说“还”。你知道任何计划或正在进行的工作吗?
  • 不,我不确定。我计划向 VSCode 开发团队提出这个功能。这就是我说“还”的原因,因为在 VSCode 的未来仍有可能添加此功能。
  • “视觉线模式”是什么意思?使用 Shift+v 只需在编辑器中输入大写 V
  • 在正常模式下输入,而不是插入模式
【解决方案3】:

现在 VSCode 支持开箱即用的自动换行。

设置 --> 文本编辑器 --> 最后 3 个选项(如今天)用于自动换行。

  1. 自动换行(控制换行方式)
  2. 自动换行列(控制编辑器的换行列)
  3. 换行缩进(控制换行的缩进)

默认情况下自动换行是关闭的。

【讨论】:

  • 这是用于“软”换行,也就是在编辑器中显示时换行,但不换行实际文本。
  • 因为在问题标题和问题描述中都提到了“hard”这个词,所以我将反对这个答案。
【解决方案4】:

硬包装评论

使用Rewrap extension

软包装代码

添加以下设置(将列宽替换为您的偏好):"editor.wordWrapColumn": 100

然后添加"editor.wordWrap": "wordWrapColumn"(在列处换行)或"editor.wordWrap": "bounded"(在列或视口处换行)。

硬包装注释和软包装代码

不幸的是,扩展和 VSCode 设置不能很好地发挥作用。

请随时upvote this feature request

【讨论】:

    【解决方案5】:

    截至 2020 年,如果您使用的是 Prettier - Code formatter 插件:

    Go to Plugins -> Find Prettier -> Cog -> Extension Settings -> Prettier: Print Width Fit code within this line limit 并设置为您想要的任何内容。默认为 80。

    当你保存文件时,Prettier 会自动格式化。

    【讨论】:

    • 这非常适合代码。为了使其也格式化 Markdown 文件,请将 proseWrap 设置为 always(默认为 preserve)。
    • @Max Ivanov 这正是我想要的!
    【解决方案6】:

    目前在 GitHub 上的 VS Code 问题跟踪器中有一个 Open 请求,You Can Find It Here

    【讨论】:

    • 不幸的是,问题现已关闭,主题已锁定。 “我们试图保持 VS Code 精简”:(
    • 是的,肯定关门了。
    【解决方案7】:

    编辑:(以下答案可能是软包装,请参阅此处了解软包装和硬包装之间的区别:https://stackoverflow.com/a/319932/9481613) 在我的版本中,它是首选项-> 设置,然后向下滚动到“编辑器:自动换行”,其中有一个下拉框,我从中选择了 wordWrapColumn。选择此项并关闭后,当我单击底部的立即查看时,它会显示 Word Wrap Alt+Z。

    【讨论】:

    • 又一个人混淆了软包装和硬包装。阅读以前的 cmets!
    【解决方案8】:

    如果有人在运行时遇到问题,可能需要禁用辅助功能支持/屏幕阅读器。转到首选项 >> 文本编辑器 >> 辅助功能支持并将其关闭。

    【讨论】:

      【解决方案9】:

      您可以使用C_Cpp.clang_format_fallbackStyle 中的C_Cpp.clang_format_fallbackStyle 中的ColumnLimit 成员轻松设置列限制@ 987654323@(您必须安装Microsoft C/C++ 扩展)

      "C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: WebKit, IndentWidth: 4, ColumnLimit: 80 }",
      

      然后您可以使用 Shift + Alt + F

      格式化文件

      您可以在此格式功能中更改许多选项

      "C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: WebKit, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Attach, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 80, AccessModifierOffset: -4 }",
      

      预定义样式的名称,在 clang-format 的情况下用作后备 使用样式文件调用,但找不到 .clang-format 文件。 可能的值为 Visual Studio、LLVM、Google、Chromium、Mozilla、 WebKit, Microsoft, GNU, none, 或使用 {key: value, ...} 设置特定的 参数。例如,Visual Studio 风格类似于:{ BasedOnStyle:LLVM,UseTab:从不,IndentWidth:4,TabWidth:4, BreakBeforeBraces:奥尔曼,AllowShortIfStatementsOnASingleLine:假, IndentCaseLabels:假,ColumnLimit:0,AccessModifierOffset:-4, NamespaceIndentation:全部,FixNamespaceComments:false }

      之前

      void Proc::Memory::getSramOff(const char* mem_name, uint dataSize, uint addrBits, uint& noOfBytes, uint& sram_off)
      

      之后

      void Proc::Memory::getSramOff(const char* mem_name, uint dataSize,
          uint addrBits, uint& noOfBytes, uint& sram_off)
      

      【讨论】:

        猜你喜欢
        • 2013-05-13
        • 2021-03-22
        • 1970-01-01
        • 2019-08-12
        • 2019-08-21
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多