Como corrigir / converter recuo de espaço no texto sublime?


228

Exemplo: se eu tenho um documento com 2 recuos de espaço e quero que ele tenha 4 recuos de espaço, como faço para convertê-lo automaticamente usando o editor de texto sublime?

Respostas:


525

Aqui está um truque interessante no Sublime Text 2 ou 3 para converter o espaçamento de recuo em um documento.

TL; DR:

Convertendo de 2 espaços para 4 espaços:

Verifique se a largura da guia está definida como 2. Converta o recuo de dois espaços em guias, alterne para a largura da guia 4 e, em seguida, converta o recuo novamente em espaços.

A descrição detalhada:

Vamos para:

View -> Indentation

Deve ler-se:

  • Indent using spaces [x]
  • Tab width: 2

Selecione:

  • Convert Indentation to Tabs

Depois selecione:

  • Tab width: 4
  • Convert Indentation to Spaces

Feito.


5
Obrigado! : D Economizou muito tempo. Nota. Você também pode fazer "encontrar: o espaço-space => selecione todos => guia"
Automatico

11
Criei uma macro sublime que faz tudo isso para você gist.github.com/joshmfrankel/5707020 . Aproveite :-)
Josh Frankel

2
Quero ressaltar que o "Converter recuo em espaços" também funciona se você tiver um arquivo de texto em que as guias não ocupem toda a largura da guia. Digamos, para um arquivo em que o autor usou guias para formatar colunas, portanto, se você localizasse e substituísse as guias, as colunas resultantes não seriam mais alinhadas. O uso de "Converter recuo em espaços" o manterá alinhado corretamente
Joe Pinsonault 4/13/13

Também criei macros e exemplos de atalhos de teclado para um colega de trabalho antes de ver a macro de Josh. O meu usa ctrl + 2 e ctrl + 4 para permitir alternância: gist.github.com/beaugunderson/8588871
Beau

74

Na verdade, achei melhor que minha sanidade tivesse preferências de usuário definidas da seguinte forma:

"translate_tabs_to_spaces": true,
"tab_size": 2,
"indent_to_bracket": true,
"detect_indentation": false

O detect_indentation: falseé especialmente importante, uma vez que obriga Sublime para honrar essas configurações em cada arquivo, ao contrário das View -> Indentationconfigurações.

Se você quiser se sentir bem, também pode definir um atalho de teclado para re-recuar automaticamente seu código (YMMV) colando o seguinte em Sublime -> Preferences -> Key Binding - User:

[
  { "keys": ["ctrl+i"], "command": "reindent" }
]

e para visualizar o espaço em branco:

"indent_guide_options": ["draw_active"],
"trim_trailing_white_space_on_save": true,
"ensure_newline_at_eof_on_save": true,
"draw_white_space": "all",
"rulers": [120],

9

Eu achei, em minha opinião, uma solução mais simples que Magne:

No mac:

"cmd+f" => "  "(two spaces) => "alt+enter" => "arrow right" => "  "(two more spaces) => set tab width to 4(this can be done before or after.

No Windows ou em outras plataformas, mude cmd+fe alt+entercom o que são suas finde select allteclas de atalho.

Nota: este método é propenso a "erros" se você tiver mais de um espaço no seu código. Portanto, é menos seguro que o método de Magne, mas é mais rápido (pelo menos para mim).


Não consegui fazer isso funcionar como tal, mas usei o princípio e apenas localizei e substituí (cmd-option-F no Mac) e substitui "" (4 espaços) por "" (2 espaços). E funcionou!
evanbikes

Eu encontrei outra maneira de fazer isso agora, mas é específica para o idioma. Se você possui um plug-in de formatação como o RubyFormat, basta definir o tamanho de guia desejado e, em seguida, reformatar o código. No caso de RubyFormatseria cmd+shift+R.
Automatico

7

Enquanto muitas das sugestões funcionam ao converter 2 -> 4 de espaço. Encontrei alguns problemas ao converter 4 -> 2.

Aqui está o que eu acabei usando:

Sublime Text 3/Packages/User/to-2.sublime-macro

[
  { "args": null, "command": "select_all" },
  { "args": { "set_translate_tabs": true }, "command": "unexpand_tabs" },
  { "args": { "setting": "tab_size", "value": 1 }, "command": "set_setting" },
  { "args": { "set_translate_tabs": true }, "command": "expand_tabs" },
  { "args": { "setting": "tab_size", "value": 2 }, "command": "set_setting" }
]

5

Se você encontrar a pesquisa e a substituição mais rápidas de usar, poderá usar uma substituição de regex como esta:

Encontre (regex): (^|\G) {2}(em vez de "{2}", <space>{2} basta escrever dois espaços. Use-o aqui para maior clareza.)

Substitua por 4 espaços, ou o que você quiser, como \t.


5

Eu escrevi um plugin para ele. Você pode encontrá-lo aqui ou procurar "ReIndent" no controle de pacotes. Ele geralmente faz o mesmo que Kyle Finley escreveu, mas de maneira conveniente com atalhos para converter entre 2 e 4 e vice-versa.


2

Você precisa adicionar esse código às suas ligações de teclas personalizadas:

{ "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} }

pressionando ctrl + f12, o arquivo será reindentado para um tamanho de tabulação de 4. Se você quiser um tamanho de tabulação diferente, basta alterar o número do "valor". O formato é um json simples.


Eu gosto muito obrigado! { "keys": ["ctrl+f10"], "command": "set_setting", "args": {"setting": "translate_tabs_to_spaces", "value": 2} }, { "keys": ["ctrl+f11"], "command": "set_setting", "args": {"setting": "tab_size", "value": 2} }, { "keys": ["ctrl+f12"], "command": "set_setting", "args": {"setting": "tab_size", "value": 4} },
Adicionei

0

A coisa mais fácil que fiz foi,

alterei meu recuo para guias

e resolveu o meu problema.

Você pode fazer o mesmo,

para Espaços

bem como por sua necessidade.

Mencionou o instantâneo do mesmo.

insira a descrição da imagem aqui


Sim, mas a pergunta pede a situação quando você inicia e termina com recuo como espaços.
Magne

0

Recentemente, enfrentei um problema semelhante. Eu estava usando o editor sublime. não é um problema com o código, mas com o editor.

Abaixo, as alterações nas configurações de preferência funcionaram para mim.

Menu Texto sublime -> Preferências -> Configurações: específico da sintaxe :

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.