¿Cómo sigo creando accidentalmente un espacio sin interrupción antes de abrir la llave?

20

Soy consciente de que esta es una pregunta extraña, y es posible que ni siquiera sea el foro adecuado para publicarla. Pero esto ha sido un problema durante varios años.

De vez en cuando, digamos una vez al mes, cuando programo, presento un espacio sin interrupción en lugar de un espacio normal, antes de abrir una llave.

Esto sucede digamos cuando estoy escribiendo () {

Esto conduce a misteriosos errores de pelusa. Cláusulas CSS que no se aplican. Hasta que lo recuerde, esto podría ser.

Hasta donde sé, esto solo sucede en vim, pero como es mi editor principal, es posible que nunca haya sucedido en otro software. Pero ninguno de mis compañeros de trabajo en mis últimos trabajos tuvo ese problema, a pesar de que usan el mismo diseño de teclado que yo. Sin embargo, soy el único que usa vim regularmente, por eso pensé en publicar aquí ...

Esto me sucedió al menos en ubuntu 14.04, 16.04 y mac os x.

:set list no lo revela

Estoy usando una distribución de teclado francés-canadiense, lo que significa que el carácter de llave se hace presionando alt + `

Estoy muy cansado de que esto cause problemas, es poco frecuente y me olvido de ello.

Si no puede decirme por qué esto sigue sucediendo, algún tipo de configuración para resaltar ese carácter de una manera obvia sería una respuesta adecuada y realmente ayudaría con este problema.

Sarumanatee
fuente
Puede cambiar sus combinaciones de teclas como sugiere Michael: superuser.com/a/142573
user12125
Una mierda como esta es la razón por la que finalmente cambié mi diseño permanentemente de sueco a estadounidense. Probablemente paso más tiempo escribiendo Inglés + C + Perl + Bash + Vim que escribiendo mis divertidas letras å, ä y ö. Esos se producen fácilmente utilizando una clave de redacción.
tubería

Respuestas:

24

Otros ya han proporcionado soluciones, pero en cuanto a la razón por la que sucede, apuesto a que accidentalmente presionas Alt+ Space.

Estoy usando Xubuntu con el diseño de teclado finlandés de 105 teclas, así que para mí, escribir {significa presionar AltGr+ 7. Acabo de hacer una prueba rápida en xfce4-terminal (en la línea de comando bash), y presionar AltGr+ Spaceproduce un espacio sin interrupción (U + 00A0).

Apuesto a que lo que está sucediendo es que está presionando la Alttecla antes de presionar la llave, y a veces eso sucede antes de presionar la barra espaciadora, produciendo un espacio que no se rompe. Y dado que parece idéntico a un espacio normal, no te das cuenta de que ha sucedido antes de que algo se rompa misteriosamente, lo que te dificulta notar que sucede y, por lo tanto, también es difícil desaprender ese hábito.

Ilmari Karonen
fuente
Oooh, voy a intentar esto mañana en el trabajo. Siempre pongo un espacio antes de mi llave, ¡Tendría sentido tener mi dedo en la tecla shift demasiado pronto de vez en cuando!
Sarumanatee
2
@Sarumanatee: en linux puedes deshabilitar el carácter nbsp por completo. Quizás el administrador de teclado de Ubuntu incluso tiene una opción para ello. Si no, puede ajustar el mapa del teclado usted mismo (es cuestión de eliminar una línea, en mi sistema el mapa de teclas sería /usr/share/X11/xkb/symbols/us) después de ajustar la llamada setxkbmap uso cualquier idioma de su preferencia
unperson325680
@progo YES. Estoy en macos en este momento, y uso Karabiner para ajustar la distribución del teclado ya que la parte inferior izquierda de mi teclado es "fn" por defecto, lo que creo que es completamente tonto. Me inspiraste a registrarme allí, y hay una opción para cambiar todos los espacios que no se rompen al espacio normal
Sarumanatee
Y esa opción confirma la sugerencia de @Ilmari Karonen, ya que esa opción de mosquetón muestra los comandos para crear nbsp: opción + espacio, y opción + cambio + espacio. Aunque resulta que, al final, ¡realmente no estaba relacionado con vim!
Sarumanatee
Ilmari Karonen tiene razón, por lo que no se trata de la explicación, sino solo de describir mi solución. He agregado una coincidencia de sintaxis que vincula el espacio que no se rompe con el grupo de resaltado de Error, para que sea visiblemente diferente del espacio ordinario. Lo mismo ocurre con el guión suave y el guión continuo (que están vinculados a dos grupos de resaltado diferentes, ya que a veces uso todo esto intencionalmente en el texto en lugar del código).
bpj
19

Puede agregar un comando automático que reemplace los espacios que no se rompen con espacios regulares al guardar tipos de archivos particulares, por ejemplo. poniendo algo como esto en tu vimrc:

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

Puede ajustarlo agregando más tipos de archivos o estableciendo una marca y volviendo a él después de la operación de reemplazo, de lo contrario, será impulsado al comienzo de la última línea donde se realizó un reemplazo.

Endre Both
fuente
Ohh, eso es bastante inteligente. No me importa que me impulsen a lugares, ya que eso no sucede con tanta frecuencia, ¡y es mucho menos molesto que pasar el tiempo depurando cosas!
Sarumanatee
13

La 'listchars'opción proporciona un medio para hacer que se 'list'muestren espacios sin interrupción. No está configurado de manera predeterminada, por lo que probablemente desee agregarlo.

set listchars+=nbsp:‗
jamessan
fuente
Eso ayuda de hecho. Creo que intentaré descubrir cómo resaltar el nbsp char todo el tiempo, para tratar de atraparlo mientras lo
escribo
2
@Sarumanatee Si agrega la línea a su vimrc, de hecho, los resaltará a medida que los escriba.
Tumbler41
1

sí, eso es probablemente alt + espacio, me pasa mucho cuando uso el operador de tubería:

cat xyz.txt | grep abc

si mantiene presionada la tecla alt durante demasiado tiempo, creará un espacio que no se rompe después de la tubería y bash intentará encontrar un comando "grep" y luego le dirá que no se encontró grep.

en macos hubo algún truco para cambiar el mapa de teclas, por lo que cada vez que inserte un espacio que no se rompa, se convertirá / reemplazará por un regular. Por lo que recuerdo, el mapa de teclas se cambia para todo el teclado, por lo que soluciona su problema en todas las aplicaciones.

Miguel
fuente
alt + space no tiene nada que ver con Vim. Por defecto (como en: no hay asignaciones de usuarios), en la mayoría de los sistemas alt + space generará algún escape que contendrá un Esc, que saldrá del modo de inserción en Vim. Y eso es todo. El espacio no rompible es el resultado de algún bus de entrada o administrador de entrada en su sistema, Vim / Gvim nunca lo ve.
grochmal