O Vim é muito confortável quando se trata de guia vs. preferências de espaço. Pelo que entendi, a tabstop
configuração indica a largura de um caractere de tabulação. A shiftwidth
configuração especifica quantas colunas aumentar / diminuir ao usar os comandos <<e >>, enquanto a softtabstop
configuração influencia a quantidade de espaço em branco a ser inserido quando você pressiona a Tabtecla no modo de inserção. Se expandtab
estiver ativado, a tecla tab insere um softtabstop
número de caracteres de espaço. Enquanto com expandtab
desligado, pressionar a Tabtecla insere o menor número possível de caracteres de tabulação + espaço que correspondem softtabstop
. (Por favor me corrija se eu estiver errado.)
Este último ponto me faz pensar: existe um caso prático onde você não gostaria shiftwidth == tabstop && tabstop == softtabstop
? Não consigo pensar em nenhum. No que me diz respeito, seria mais conveniente se eu pudesse definir todos os 3 com o mesmo valor, em uma única atribuição. por exemplo, ligando para:
:set stab=4
o que seria equivalente a executar:
:set tabstop=4 softtabstop=4 shiftwidth=4
Alguém pode sugerir como isso poderia ser feito?
ATUALIZAR
Obrigado pelas respostas até agora de muito php , hobbs e kaiser.se . Em vez de responder a cada um individualmente, estou atualizando a pergunta aqui.
Softtabstop com expandtab desativado
Eu disse acima que com expandtab desativado, pressionar a tecla Tab insere o menor número possível de caracteres de tabulação + espaço que correspondem softtabstop
. Eu mantenho isso, mas acho que preciso explicar o que quis dizer. Tentarei fazer isso por meio de alguns exemplos. Para acompanhar, corra :set list
para que você possa ver os caracteres da guia.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
No modo de inserção, pressionar a tecla tab insere 2 caracteres de espaço. Pressione a tecla tab uma segunda vez e, em vez de inserir mais dois caracteres de espaço (para um total de 4 caracteres de espaço), substitui os 2 espaços anteriores por um único caractere de tabulação. Tabstop é definido como 4, portanto, um único caractere de tabulação tem a mesma largura que 4 espaços.
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
No modo de inserção, pressionar a tecla Tab insere 1 caractere de tabulação mais 2 espaços. O caractere de tabulação tem uma largura de 4, portanto, a largura total é 6, e isso é obtido usando 3 caracteres. Pressionar a tecla tab uma segunda vez insere dois caracteres de tabulação e remove os dois espaços que foram inseridos anteriormente. A largura total é 12, e isso é obtido usando 3 caracteres.
Em ambos os exemplos, o Vim insere o número mínimo possível de caracteres de tabulação + espaço que correspondem ao softtabstop.
Se estou trabalhando com expandtab desativado, não consigo me imaginar querendo o controle granular extra que pode ser obtido definindo softtabstop com um valor diferente de tabstop. Ele ainda seria útil para mim ser capaz de definir tabstop
, softtabstop
e shiftwidth
com o mesmo valor com um único comando.
O expandtab torna o softtabstop redundante?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
No modo de inserção, pressionar a tecla tab insere 4 espaços. Pressionar a tecla delete apaga um único espaço - então você tem que voltar 4 vezes se você apertar a tecla tab por acidente.
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
No modo de inserção, pressionar a tecla tab insere 4 espaços. Pressionar a tecla Backspace exclui 4 espaços.
Se estou trabalhando com expandtab
ativado, prefiro que a tecla delete remova a mesma quantidade de espaço em branco que as inserções da tecla tab. Portanto, também neste caso, acho que seria útil poder atribuir o mesmo valor a tabstop
, softtabstop
e shiftwidth
simultaneamente.
Um atalho ainda seria útil
É ótimo que o Vim forneça tanta flexibilidade, mas não consigo me ver precisando disso. Eu só quero ser capaz de escolher a largura de uma guia, e se é uma guia 'rígida' (usando um caractere de tabulação) ou uma guia 'flexível' (composta de espaços). Alternar entre as guias rígidas e flexíveis é bastante fácil ( :set expandtab!
), mas eu gostaria que fosse mais simples definir a largura da guia, sem ter que mexer com 3 parâmetros diferentes.
Portanto, minha sugestão proposta para algo como :set stab=4
ainda parece boa para mim.