修复Sublime Text 2的行尾?

180

以下是我设置-用户的配置:

{
    "auto_indent": true,
    "color_scheme": "Packages/Color Scheme - Default/Twilight.tmTheme",
    "default_line_ending": "LF",
    "detect_indentation": true,
    "font_size": 10.0,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": true,
    "trim_automatic_white_space": true,
    "use_tab_stops": true
}

对于default_line_ending选项的注释如下:

Comment to default_line_ending option

当我创建一个新文件时,在这里检查行尾:

Check line ending

正如你所看到的,它仍然是Windows格式... 有什么想法吗?


你尝试过点击“Unix”,然后关闭并重新打开吗? - Preet Kukreti
@PreetKukreti 是的。重新打开后,它又是“Windows”了。它只适用于当前文件,而不是新文件。 - mintobit
1
@an1zhegorodov 你之前保存了文件吗?这对我有用... - charlysisto
1
是的。在保存文件后,它也对我起作用了。 - Pierre Guilbert
4个回答

202

该评论指出

// Determines what character(s) are used to terminate each line in new files.
// Valid values are 'system' (whatever the OS uses), 'windows' (CRLF) and
// 'unix' (LF only).

您正在设置

"default_line_ending": "LF"

您应该设置为

"default_line_ending": "unix"


1
我也遇到了同样的问题,但是我已经正确设置了 "default_line_ending": "unix",我不知道为什么它就是不起作用!这让我非常疯狂!我已经做了一些研究,但似乎没有有用的解决方法。 - acrespo
@acrespo 你确定它不会被其他偏好文件覆盖吗?Sublime 有很多这样的文件 :)——如果你在语法特定的偏好设置中指定了一种行结束方式,它将覆盖用户偏好设置,进而覆盖全局偏好设置。 - Leigh
11
在新文件上设置"default_line_ending":"unix"可以正常工作,但在现有(旧)文件上无法生效。有人知道如何更改这种行为吗? - soothsayer
11
这只能手动完成,如果能自动化将会非常有帮助。您可以根据上面的图像更改此设置 查看 -> 行结束符 -> Unix @soothsayer - A Star
5
@占卜师,对于现有的文件,请选择所有文本,然后依次点击 查看 -> 行尾 -> Unix。最后保存文档即可。 - AGS
显示剩余5条评论

9
EditorConfig项目 (Github链接)是另一个非常可行的解决方案。类似于sftp-config.json和.sublime-project/workspace文件,一旦您设置了.editorconfig文件,无论是在项目文件夹还是在父文件夹中,每次您保存该目录结构中的文件时,插件都会自动应用点文件中的设置并为您自动完成一些不同的操作。其中一些操作包括保存Unix风格的换行符,添加文件末尾的换行符,删除空格以及调整缩进选项卡/空格设置。


快速示例

使用Package Control在Sublime中安装EditorConfig插件;然后在父目录(甚至是您的主目录或根目录)中放置名为.editorconfig的文件,并填写以下内容:

[*]
end_of_line = lf

就是这样。这个设置将在你保存该目录结构中的文件时自动应用Unix风格的换行符。你还可以做更酷的事情,例如删除不必要的尾随空格或在每个文件末尾添加一个尾随换行符。有关更多详细信息,请参考https://github.com/sindresorhus/editorconfig-sublime上的示例文件,即:

# editorconfig.org
root = true

[*]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

root = true 这一行的意思是,EditorConfig 不会在目录结构的上层查找其他的 .editorconfig 文件。


不够积极。我需要插件识别导致文件具有crlf的人员链,并打击每个人的面部。然后用lf保存它。 - ArtOfWarfare
谢谢,这就是我的问题,我安装了这个插件,它从.config文件中获取了错误的配置。 - Luke Robertson

1

批量修改项目中所有文件的最简单方法是使用Line Endings Unify包:

  1. Ctrl+Shift+P type inst + choose Install Package.
  2. Type line end + choose Line Endings Unify.
  3. Once installed, Ctrl+Shift+P + type end + choose Line Endings Unify.
  4. OR (instead of 3.) copy:

    {
     "keys": ["ctrl+alt+l"],
     "command": "line_endings_unify"
    },
    

    to the User array (right pane, after the opening [) in Preferences -> KeyBindings + press Ctrl+Alt+L.

另一个答案所述:

  • 回车符(CR)字符(0x0D\r)[...]早期的Macintosh操作系统(OS-9及更早版本)。

  • 换行符(LF)字符(0x0A\n)[...]基于UNIX的系统(Linux,Mac OSX)。

  • 行尾(EOL)序列(0x0D 0x0A\r\n)[...](非Unix:Windows,Symbian OS)。

如果您有node_modulesbuild或其他自动生成的文件夹,请在运行包之前将它们删除。

当您运行该包时:

  1. 在底部,您被要求选择要搜索的文件扩展名,以逗号分隔的列表形式(只需输入需要加快替换速度的扩展名,例如 js,jsx)。
  2. 然后,您将被要求选择要使用的输入行结束符,例如如果需要LF,则输入 \n
  3. 按下ENTER并等待,直到出现带有LineEndingsUnify Complete的警报窗口。

1

将行尾从LF更改为CRLF:

打开Sublime并按照以下步骤进行:

1 按Ctrl+shift+p,然后安装包名“line unify endings”

然后再次按Ctrl+shift+p

2 在空白输入框中输入“Line unify ending”

3 按两次回车键

Sublime可能会冻结一段时间,结果会将行尾从LF更改为CRLF


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接