Reparando finais de linhas de texto sublime 2?

177

Aqui está a minha Settings - Userconfiguração:

{
    "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
}

O comentário à default_line_endingopção diz: Comentar para a opção default_line_ending

Quando crio um novo arquivo, verifico a linha que termina aqui:

Verificar final da linha

Como você pode ver, ainda é o Windows ... Alguma idéia?

mintobit
fonte
você tentou clicar em "Unix", fechar e reabrir?
Preet Kukreti
@PreetKukreti Yes. Depois de reabrir, é "Windows" novamente. Funciona apenas para o arquivo atual, não para o novo arquivo.
Mintobit 10/08/12
1
@ an1zhegorodov você salvou o arquivo antes? que funcionou para mim ...
charlysisto
1
Sim. depois de salvar o arquivo, funcionou para mim também.
precisa

Respostas:

199

O comentário declara

// 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).

Você está definindo

"default_line_ending": "LF",

Você deve definir

"default_line_ending": "unix",

Leigh
fonte
1
Eu tenho o mesmo problema, mas estou definindo corretamente "default_line_ending": "unix", não sei por que diabos isso não funciona! Está me deixando louco! Eu pesquisei um pouco e, aparentemente, não tem solução útil.
acrespo
@acrespo Você tem certeza de que não está sendo substituído por outro arquivo de preferências? O Sublime possui muitos :) - Se você especificou um tipo de linha que termina em prefs específicos de sintaxe, ele substituirá os prefs dos usuários, que por sua vez substituem os prefs globais
Leigh
10
definir "default_line_ending": "unix", funciona bem em novos arquivos .. mas não em arquivos existentes (mais antigos). Alguém sabe como mudar esse comportamento?
vidente
11
Isso só pode ser feito manualmente, seria realmente útil se isso fosse automatizado. Você pode alterar isso como visto na imagem acima Exibir-> Finais de linha-> Unix @soothsayer
A Star
5
@soothsayer, para arquivos existentes, selecione todo o texto e depois view-> line endings-> unix. Salve o documento.
AGS
9

O projeto EditorConfig ( link do Github ) é outra solução muito viável. Semelhante ao tipo de arquivo sftp-config.json e .sublime-project / workspace, depois de configurar um arquivo .editorconfig, na pasta do projeto ou na pasta pai, toda vez que você salvar um arquivo nessa estrutura de diretórios, o plug-in será aplique automaticamente as configurações no arquivo de ponto e automatize algumas coisas diferentes para você. Alguns deles estão salvando finais de linhas no estilo Unix, adicionando nova linha de fim de arquivo, removendo espaços em branco e ajustando as configurações de guia / espaço de recuo.


EXEMPLO RÁPIDO

Instale o plugin EditorConfig no Sublime usando o Package Control; em seguida, coloque um arquivo nomeado  .editorconfigem um diretório pai (mesmo em sua casa ou na raiz, se desejar), com o seguinte conteúdo:

[*]
end_of_line = lf

É isso aí. Essa configuração aplicará automaticamente as terminações de linha no estilo Unix sempre que você salvar um arquivo nessa estrutura de diretórios. Você pode fazer coisas mais legais, ex. apare espaços em branco finais indesejados ou adicione uma nova linha final no final de cada arquivo. Para obter mais detalhes, consulte o arquivo de exemplo em https://github.com/sindresorhus/editorconfig-sublime , ou seja:

# 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

A root = truelinha significa que o EditorConfig não procurará outros .editorconfigarquivos nos níveis superiores da estrutura de diretórios.

Nathan C.
fonte
Insuficientemente agressivo. Eu preciso do plugin para identificar a cadeia de pessoas que levam o arquivo a ter crlf e dar um soco na cara de cada uma delas. E então salve com lf.
ArtOfWarfare
Graças, este foi o meu problema, eu tinha instalado este plugin e que estava tomando a configuração errada do arquivo.config
Luke Robertson
1

para terminar as terminações de linha de LF a CRLF:

abra o Sublime e siga as etapas: -

1 pressione Ctrl + shift + p e instale a linha de nome do pacote unificar terminações

depois pressione Ctrl + shift + p

2 na caixa de entrada em branco, digite "Fim da unificação de linha"

3 Pressione Enter duas vezes

O sublime pode congelar algumas vezes e, como resultado, alterará as terminações da linha de LF para CRLF

sharma parth
fonte
1

A maneira mais simples de modificar todos os arquivos de um projeto de uma só vez (lote) é através do pacote Line Endings Unify :

  1. Ctrl+ Shift+ Pdigite inst + escolha Instalar Pacote .
  2. Digite line end + escolha Line Endings Unify .
  3. Uma vez instalado, Ctrl+ Shift+ P+ digite end + escolha Line Endings Unify .
  4. OU (em vez de 3.) copiar:

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

    para a matriz Usuário (painel direito, após a abertura [) em Preferências -> KeyBindings + pressione Ctrl+ Alt+ L.

Como mencionado em outra resposta :

  • O caractere de retorno de carro ( CR ) ( 0x0D, \r) [...] sistemas operacionais Macintosh anteriores (OS-9 e versões anteriores).

  • O caractere Line Feed ( LF ) ( 0x0A, \n) [...] sistemas baseados em UNIX (Linux, Mac OSX)

  • A sequência de fim de linha ( EOL ) ( 0x0D 0x0A, \r\n) [...] (não Unix: Windows, Symbian OS).

Se você tiver node_modules , build ou outras pastas geradas automaticamente, exclua-as antes de executar o pacote.

Quando você executa o pacote:

  1. você será solicitado a escolher quais extensões de arquivo procurar em uma lista separada por vírgulas (digite as únicas necessárias para acelerar as substituições, por exemplo,js,jsx ).
  2. então você será perguntado sobre qual linha de entrada está terminando , por exemplo, se você precisar do tipo LF\n .
  3. pressione ENTERe aguarde até ver uma janela de alerta com o LineEndingsUnify Complete .
CPHPython
fonte