Excluir a "aba" expandida por espaço no Vim com um toque de tecla?

19

Eu edito o código Python com o Vim.

Com a tabtecla, recebo quatro espaços inseridos para recuo. Como posso excluir esses espaços com um toque "Backspace" (?) - em vez de quatro?

Tem que haver alguma opção "set" para isso ...

Aqui está o meu .vimrc:

set autoindent
set ts=4
set sw=4
set et
Evgeny
fonte

Respostas:

23

Você pode usar Ctrl+Dpara fazer backup de uma parada de tabulação. Na verdade, isso move a linha inteira para a tabulação esquerda; Ctrl+Tfaz a mesma coisa para a direita. Observe que essas teclas só funcionam no modo Inserir (use <<e >>para o equivalente no modo Comando).

Greg Hewgill
fonte
30
set softtabstop=4
sf17k
fonte
10
Na OMI, é exatamente isso que o OP solicitou. Merece mais votos positivos.
Ludwig Weinzierl
2
Essa é a resposta correta.
Mk12 30/07
11
Não sabia disso, e era exatamente isso que eu estava procurando. 1
NigoroJr
5

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

forma curta: set ts=4 sts=-1 sw=0 et

Explicação

Se você definir softtabstop(ou sts), -1ele se comportará automaticamente da mesma forma que tabstop( ts), o que poupará alguns aborrecimentos se você alterar muito as guias. Definir shiftwidth( sw) como 0deve efetivamente fazer o mesmo tabstop.

Em detalhe

shiftwidth sw

Número de espaços a serem usados ​​para cada etapa do recuo (automático). Usado para cindent, >>, <<, etc.
Quando zero, o tabstopvalor será usado.

tabstop ts

Número de espaços que um no arquivo conta. Veja também : comando retab e softtabstopopção.

softtabstop sts

Número de espaços que um Tabconta para a execução de operações de edição, como inserir um Tabou usar BS. Ele se sente como Tabs estão sendo inseridos, quando na verdade uma mistura de espaços e s são usados. Isso é útil para manter a tabsconfiguração is no seu valor padrão, enquanto é possível editar como está definido sts. Quando stsé negativo, o valor de shiftwidthé usado. Isso poupará alguns aborrecimentos se você alterar muito as paradas de tabulação. Quando expandtabnão está definido, o número de espaços é minimizado usando Tabs.

expandtab et

No modo Inserir: use o número apropriado de espaços para inserir a. Espaços são usados em travessões com o >e <comandos e quando autoindentestá ligado. Para inserir uma guia real quando expandtabestiver ativada, use Ctrl- V Tab. Veja também : retab

Orwellophile
fonte
Legal, eu uso o vim há anos, mas a herança de sts / sw / ts nunca chamou minha atenção.
timss 30/08
2

Eu escrevi GreedyBackspace.vim para alguém que queria algo assim. Eu não uso pessoalmente, por isso já faz um tempo desde que o atualizei. Eu não recebi nenhum relatório de bug recentemente, no entanto.

Heptite
fonte
1

Várias opções:

  1. Você pode 'redefinir' todos os espaços em branco para que eles sejam substituídos por guias. Dessa forma, eles poderiam ser facilmente excluídos.
  2. Você pode (isso não foi testado, por isso estou propondo idéias aqui) criar uma função que é executada no modo normal 4 vezes a tecla backspace. Em seguida, mapeie-o para algo. No entanto, não há como saber se excluirá espaços ou alguns caracteres importantes, portanto isso é potencialmente inseguro.
  3. '4X' excluirá os últimos 4 caracteres (que é grande X, não pequeno, pequeno atuará como a tecla Del '.
Torre
fonte
0

maneira mais fácil <<, repita com um.

vimmer
fonte
Olá e bem-vindo ao superusuário. Embora eu concorde com sua resposta sendo um usuário vi. Sua resposta é curta, não explica por que você sugere o que está sugerindo e por que não está sugerindo algo que se encaixe na pergunta.
Mogget 03/04
-1

Você verificou usando a configuração das guias de expansão no seu VIM?

:set noet

Normalmente, prefiro manter as guias ativadas enquanto estiver trabalhando nos arquivos.
Quando necessário, substituo as guias por 4 espaços ou quantas forem necessárias.

:%s/<ctrl+V><tab>/    /g
                  ----

Como um pequeno bônus, seu arquivo de origem é menor em 3 caracteres por guia :-)

nik
fonte
ah, eu tenho et porque tenho que expandir as guias - eu acho - porque o código que edito foi inicialmente escrito dessa maneira. agora estou apenas seguindo essa convenção.
Evgeny
Você ainda pode fazer o que eu digo e restaurar espaços no final (quando você tem que dar a volta arquivo para o repositório)
nik
Talvez você possa ter uma função vim que as expanda para abas abertas e as reduza para espaços ao fechar? Alguém tem alguma ideia?
Sixtyfootersdude
Essa é uma resposta realmente inútil - ela reabrirá desnecessariamente o debate entre guias e espaços, sem fornecer informações úteis.
precisa
-2

Eu não acho que há um caminho. Depois que a tecla tab é expandida para quatro espaços, o vim não tem como saber que eles já foram uma tab.

David Mackintosh
fonte
4
-1: Falta de imaginação.
Sixtyfootersdude