Como eu continuo criando acidentalmente um espaço sem interrupção antes de abrir a chave?

20

Estou ciente de que essa é uma pergunta estranha e talvez esse não seja o fórum certo para publicá-la. Mas isso tem sido um problema há vários anos.

De tempos em tempos, digamos que uma vez por mês, quando programa, introduzo um espaço No-Break em vez de um espaço regular, antes de abrir uma chave.

Isso acontece, digamos, quando estou escrevendo () {

Isso leva a erros de fiapos misteriosos. Cláusulas CSS que não se aplicam. Até que eu lembre que pode ser isso.

Pelo que sei, isso só acontece no vim, mas como é o meu editor principal, talvez nunca tenha acontecido em outro software. Mas nenhum dos meus colegas de trabalho nos meus últimos empregos teve esse problema, mesmo que eles usem o mesmo layout de teclado que eu. Eu sou o único a usar o vim regularmente, é por isso que pensei em postar aqui ...

Isso aconteceu comigo pelo menos no ubuntu 14.04, 16.04 e mac os x.

:set list não revela.

Estou usando um layout de teclado francês-canadense, o que significa que o caractere de colchete é feito pressionando alt + `

Estou muito cansado disso, causando problemas, é pouco frequente que eu continuo esquecendo.

Se você não pode me dizer por que isso continua acontecendo, algum tipo de configuração para destacar esse personagem de uma maneira óbvia seria uma resposta adequada e realmente ajudaria nesse problema.

Sarumanatee
fonte
Você pode alterar as combinações de teclas como Michael sugere: superuser.com/a/142573
user12125
Porcaria como essa é a razão pela qual finalmente mudei meu layout permanentemente de sueco para americano. Provavelmente passo mais tempo digitando inglês + C + Perl + Bash + Vim do que digitando nossas letras engraçadas å, ä e ö. Esses são produzidos facilmente usando uma tecla de composição.
pipe

Respostas:

24

Outros já forneceram soluções alternativas, mas quanto ao motivo disso acontecer, aposto que você está pressionando acidentalmente Alt+ Space.

Estou usando o Xubuntu com o layout de teclado finlandês de 105 teclas, então, para mim, digitar {significa pressionar AltGr+ 7. Acabei de fazer um teste rápido no xfce4-terminal (na linha de comando do bash) e pressionar AltGr+ de Spacefato produz um espaço sem interrupção (U + 00A0).

Aposto que o que está acontecendo é que você está pressionando a Alttecla antes de digitar a chave, e às vezes isso acontece antes de você realmente pressionar a barra de espaço, produzindo um espaço ininterrupto. E como parece idêntico a um espaço normal, você não percebe que isso aconteceu antes que algo misteriosamente se quebre, dificultando a observação do que aconteceu e, portanto, também a desaprendência desse hábito.

Ilmari Karonen
fonte
Oooh, vou tentar isso amanhã no trabalho. Eu sempre coloco um espaço antes do meu aparelho encaracolado, faria sentido que eu colocasse meu dedo na tecla Shift muito cedo de vez em quando!
Sarumanatee
2
@ Sarumanatee: no Linux, você pode realmente desativar o caractere nbsp. Talvez o gerenciador de teclados do Ubuntu tenha até uma opção para isso. Se não, você pode afinar o teclado mapear a si mesmo (que é uma questão de apagar uma linha, no meu sistema o mapa de teclado seria /usr/share/X11/xkb/symbols/us) após ajustes finos chamada setxkbmap usou qualquer outra língua da sua preferência
unperson325680
@progo SIM. Agora estou no macos e uso o Karabiner para ajustar o layout do teclado, já que o canto inferior esquerdo do teclado é "fn" por padrão, o que acredito ser completamente idiota. Você me inspirou a check-in lá, e não há uma opção para alterar todos os espaços sem quebras de espaço normal
Sarumanatee
E essa opção confirma a sugestão de @Ilmari Karonen, pois a opção mosquetão exibe os comandos para criar nbsp: opção + espaço e opção + shift + espaço. Apesar de tudo, no final, não estava realmente relacionado ao vim!
precisa saber é o seguinte
Ilmari Karonen está certa, então não se trata da explicação, mas apenas para descrever minha solução alternativa. Eu adicionei uma correspondência de sintaxe vinculando o espaço sem quebra ao grupo de destaque Erro, para que ele fique visivelmente diferente do espaço comum. O mesmo vale para hífen suave e hífen ininterrupto (que estão vinculados a dois grupos de destaque diferentes, pois às vezes eu uso todos eles intencionalmente no texto, em vez de no código).
BPJ
19

Você pode adicionar um comando automático que substitua espaços sem quebra por espaços regulares ao salvar tipos de arquivos específicos, por exemplo. colocando algo parecido com isto no seu vimrc:

augroup RemoveSpaces
  autocmd!
  autocmd BufWritePre *.css silent! :%s/\%u00A0/ /g
augroup end

Você pode ajustá-lo adicionando mais tipos de arquivo ou definindo uma marca e retornando a ela após a operação de substituição, caso contrário você será impulsionado para o início da última linha em que uma substituição foi feita.

Endre Both
fonte
Ohh, isso é muito inteligente. Eu não me importo de ser propelido a lugares, pois isso realmente não acontece com tanta frequência, e é muito menos irritante do que gastar tempo depurando coisas!
precisa saber é o seguinte
13

A 'listchars'opção fornece um meio de tornar 'list'espaços de exibição sem interrupção. Como não está definido por padrão, você provavelmente deseja adicioná-lo.

set listchars+=nbsp:‗
jamessan
fonte
Isso realmente ajuda. Acho que vou tentar descobrir como para destacar o caractere nbsp o tempo todo, porém, para tentar pegá-lo, como eu estou escrevendo isso: o
Sarumanatee
2
@Sarumanatee Se você adicionar a linha à sua, vimrcela de fato as destacará enquanto você as digita.
precisa saber é o seguinte
1

sim, isso provavelmente é alt + space, acontece muito quando uso o operador de tubo:

cat xyz.txt | grep abc

se você pressionar a tecla alt por muito tempo, ele criará um espaço sem quebra após o pipe e o bash tentarem encontrar o comando "grep" e informar que o grep não foi encontrado.

nos macos, havia algum truque para alterar o mapa de teclas; portanto, toda vez que você insere um espaço sem quebra, ele é convertido / substituído por um regular. Tanto quanto me lembro, o mapa de teclas é alterado para todo o teclado, por isso, corrige seu problema em todos os aplicativos.

Michael
fonte
alt + space não tem nada a ver com o Vim. Por padrão (como em: nenhum mapeamento de usuário), na maioria dos sistemas, alt + space gerará algum escape que conterá um Esc, que sairá do modo de inserção no Vim. E é isso. O espaço inquebrável é o resultado de algum barramento de entrada ou gerenciador de entrada no seu sistema, o Vim / Gvim nunca o vê.
grochmal