Bagaimana cara saya membuat ruang tanpa putus tanpa sengaja sebelum membuka kurung kurawal?

20

Saya sadar ini pertanyaan aneh, dan ini mungkin bukan forum yang tepat untuk mempostingnya. Tetapi ini telah menjadi masalah selama beberapa tahun.

Dari waktu ke waktu, katakanlah sebulan sekali, ketika saya memprogram, saya memperkenalkan ruang tanpa istirahat alih-alih ruang biasa, sebelum membuka kurung kurawal.

Ini terjadi katakanlah ketika saya sedang menulis () {

Ini mengarah ke bug serat misterius. Klausa CSS yang tidak berlaku. Sampai saya ingat ini mungkin saja.

Sejauh yang saya ketahui, ini hanya terjadi di vim, tetapi karena ini adalah editor utama saya, itu mungkin tidak pernah terjadi pada perangkat lunak lain. Tapi tidak ada rekan kerja saya di pekerjaan terakhir saya yang pernah memiliki masalah itu, meskipun mereka menggunakan tata letak keyboard yang sama seperti saya. Saya satu-satunya yang menggunakan vim secara teratur, itu sebabnya saya mem-posting di sini ...

Ini terjadi pada saya setidaknya di ubuntu 14.04, 16.04, dan mac os x.

:set list tidak mengungkapkannya.

Saya menggunakan tata letak keyboard prancis-canadien, yang berarti karakter penjepit dilakukan dengan menekan alt + `

Saya sangat lelah dengan masalah yang menyebabkan ini, jarang saya lupa tentang itu.

Jika Anda tidak dapat memberi tahu saya mengapa ini terus terjadi, semacam konfigurasi untuk menyorot karakter tersebut dengan cara yang jelas akan menjadi jawaban yang sesuai dan benar-benar membantu dengan masalah ini.

Sarumanatee
sumber
Anda dapat mengubah ikatan kunci seperti yang disarankan Michael: superuser.com/a/142573
user12125
Omong kosong seperti ini sebabnya saya akhirnya mengubah tata letak saya secara permanen dari Swedia ke Amerika. Saya mungkin menghabiskan lebih banyak waktu mengetik bahasa Inggris + C + Perl + Bash + Vim daripada saya mengetik huruf å, ä dan ö lucu kami. Itu mudah diproduksi menggunakan kunci penulisan.
pipa

Jawaban:

24

Orang lain telah memberikan solusi, tetapi karena alasan mengapa hal itu terjadi, saya yakin Anda tidak sengaja menekan Alt+ Space.

Saya menggunakan Xubuntu dengan tata letak keyboard Finlandia 105-tombol sendiri, jadi bagi saya, mengetik {berarti menekan AltGr+ 7. Saya baru saja melakukan tes cepat di xfce4-terminal (pada baris perintah bash), dan menekan AltGr+ Spacememang menghasilkan ruang tanpa istirahat (U + 00A0).

Saya yakin apa yang terjadi adalah bahwa Anda menekan Alttombol untuk mengantisipasi mengetikkan penjepit, dan kadang-kadang itu terjadi sebelum Anda benar-benar menekan tombol spasi, menghasilkan ruang yang tidak pecah. Dan karena itu terlihat identik dengan ruang normal, Anda tidak menyadari itu telah terjadi sebelum sesuatu yang misterius pecah, membuatnya sulit bagi Anda untuk melihat hal itu terjadi dan dengan demikian juga sulit untuk melepaskan kebiasaan itu.

Ilmari Karonen
sumber
Oooh saya akan mencoba ini besok di tempat kerja. Saya selalu memberi ruang sebelum kurung kurawal saya, itu masuk akal kalau jari saya pada tombol shift terlalu dini dari waktu ke waktu!
Sarumanatee
2
@Sarumanatee: di linux Anda memang bisa menonaktifkan karakter nbsp sekaligus. Mungkin manajer keyboard Ubuntu bahkan memiliki opsi untuk itu. Jika tidak, Anda dapat menyetel sendiri peta keyboard (itu masalah menghapus satu baris, di sistem saya, keymap akan menjadi /usr/share/X11/xkb/symbols/us) setelah panggilan finetuning setxkbmap usatau bahasa apa pun preferensi Anda
unperson325680
@progo YA. Saya menggunakan makro sekarang, dan menggunakan Karabiner untuk menyempurnakan tata letak keyboard karena paling kiri bawah keyboard saya adalah "fn" secara default, yang saya percaya benar-benar bodoh. Anda mengilhami saya untuk check-in di sana, dan ada opsi untuk mengubah semua ruang yang tidak melanggar ke ruang normal
Sarumanatee
Dan opsi itu mengonfirmasi saran @Ilmari Karonen, karena opsi karabiner menampilkan perintah untuk membuat nbsp: opsi + spasi, dan opsi + shift + spasi. Meskipun ternyata, itu benar-benar tidak berhubungan dengan vim sama sekali pada akhirnya!
Sarumanatee
Ilmari Karonen benar, jadi ini bukan tentang penjelasan tetapi hanya untuk menggambarkan solusi saya. Saya telah menambahkan kecocokan sintaks yang menghubungkan ruang yang tidak melanggar ke grup yang menyoroti Kesalahan, sehingga terlihat berbeda dari ruang biasa. Hal yang sama berlaku untuk tanda hubung lunak dan tanda hubung non-putus (yang dihubungkan ke dua kelompok highlight berbeda karena saya kadang-kadang menggunakan semua ini dengan sengaja dalam teks sebagai lawan dari kode).
bpj
19

Anda dapat menambahkan perintah otomatis yang menggantikan ruang yang tidak melanggar dengan yang biasa saat menyimpan jenis file tertentu, misalnya. dengan meletakkan sesuatu seperti ini di vimrc Anda:

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

Anda dapat men-tweak dengan menambahkan lebih banyak jenis file atau menetapkan tanda dan kembali ke sana setelah operasi penggantian karena jika tidak, Anda akan didorong ke awal baris terakhir di mana penggantian telah dilakukan.

Endre Keduanya
sumber
Ohh itu cukup pintar. Saya tidak keberatan terdorong ke tempat karena itu benar-benar tidak sering terjadi, dan itu jauh lebih menyebalkan daripada menghabiskan waktu untuk debugging!
Sarumanatee
13

The 'listchars'pilihan menyediakan sarana untuk membuat 'list'ruang display non-breaking. Ini tidak diatur secara default, jadi Anda mungkin ingin menambahkannya.

set listchars+=nbsp:‗
jamessan
sumber
Itu memang membantu. Saya pikir saya akan mencoba mencari tahu bagaimana menyorot nbsp char sepanjang waktu, untuk mencoba dan menangkapnya saat saya mengetik: o
Sarumanatee
2
@Sarumanatee Jika Anda menambahkan baris ke baris vimrcitu, pada kenyataannya, akan menyorotnya saat Anda mengetiknya.
Tumbler41
1

ya, itu mungkin ruang alt +, banyak terjadi pada saya ketika saya menggunakan operator pipa:

cat xyz.txt | grep abc

jika Anda menahan tombol alt terlalu lama, itu akan membuat ruang tanpa putus setelah pipa dan bash akan mencoba menemukan perintah "grep" dan kemudian memberi tahu Anda bahwa grep tidak ditemukan ..

pada macos ada beberapa trik untuk mengubah keymap, jadi setiap kali Anda memasukkan ruang yang tidak melanggar, itu akan dikonversi / diganti oleh reguler. Sejauh yang saya ingat, keymap diubah untuk seluruh keyboard, jadi itu memperbaiki masalah Anda di semua aplikasi.

Michael
sumber
alt + space tidak ada hubungannya dengan Vim. Secara default (seperti pada: tidak ada pemetaan pengguna), pada sebagian besar sistem alt + space akan menghasilkan beberapa escape yang akan berisi Esc, yang akan keluar dari mode insert di Vim. Dan itu tentang itu. Ruang yang tidak dapat dipecahkan adalah hasil dari beberapa bus input atau manajer input pada sistem Anda, Vim / Gvim tidak pernah melihatnya.
grochmal