Bagaimana menghentikan zsh dari memakan ruang sebelum simbol pipa?

17

Ketika saya mengetik spasi diikuti oleh simbol pipa '|'pada baris perintah zsh, zsh memakan ruang, menempatkan simbol pipa langsung di atas kata sebelumnya. Bagaimana saya menghentikannya dari melakukan itu? Saya tidak yakin tentang kemungkinan konvensi gaya, tapi saya suka ruang di kedua sisi simbol pipa untuk dibaca. Saya menggunakan oh-my-zsh di luar kotak.

Larutan

Berdasarkan jawaban mpy di bawah ini, saya menggunakan solusi berikut:

Secara default, ZLE_REMOVE_SUFFIX_CHARS tidak terdefinisi dalam zsh / ohmyzsh. Ketika tidak terdefinisi, itu bertindak seolah-olah itu:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Saya menambahkan definisi berikut ke ~ / .zshrc saya:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(semua kecuali pipa) dan presto, sempurna! masalah hilang.

scanny
sumber
1
pertama-tama coba lakukan ini menggunakan zsh -f(untuk melewati memuat konfigurasi Anda). Anda akan melihat bahwa zsh tidak akan melakukan itu lagi. Kemudian, Anda harus menggali (kemungkinan besar) ke dalam oh-my-zsh untuk mencari tahu bagaimana penyebabnya ;-)
Francisco

Jawaban:

17

Saya kira maksud Anda bahwa ketika Anda TABmenyelesaikan perintah / nama file spasi ditambahkan secara otomatis, tetapi setelah menekannya |menghilang lagi. Kalau tidak, saya tidak bisa mereproduksi efek itu.

Namun, dalam hal ini solusinya harus sesederhana

ZLE_REMOVE_SUFFIX_CHARS=""

Penjelasannya sedikit rumit, jadi saya hanya mengutip man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Parameter ini digunakan oleh editor baris. Dalam keadaan tertentu sufiks (biasanya spasi atau garis miring) yang ditambahkan oleh sistem penyelesaian akan dihapus secara otomatis, baik karena perintah pengeditan berikutnya bukan karakter yang dapat disisipkan, atau karena karakter ditandai sebagai membutuhkan sufiks untuk dihapus.

Variabel-variabel ini dapat berisi set karakter yang akan menyebabkan akhiran dihapus. Jika ZLE_REMOVE_SUFFIX_CHARS disetel, karakter-karakter itu akan menyebabkan sufiks dihapus; jika ZLE_SPACE_SUFFIX_CHARSdisetel, karakter-karakter itu akan menyebabkan akhiran dihapus dan diganti dengan spasi.

Jika ZLE_REMOVE_SUFFIX_CHARStidak disetel, perilaku default setara dengan:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Jika ZLE_REMOVE_SUFFIX_CHARSdiset tetapi kosong, tidak ada karakter yang memiliki perilaku ini. ZLE_SPACE_SUFFIX_CHARS diutamakan, sehingga yang berikut:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

menyebabkan karakter &dan |menghapus akhiran tetapi untuk menggantinya dengan spasi.

Untuk mengilustrasikan perbedaan, anggaplah bahwa opsi AUTO_REMOVE_SLASHini berlaku dan direktori DIR baru saja selesai, dengan menambahkan /, yang diikuti oleh pengguna mengetik &. Hasil standarnya adalah DIR&. Dengan ZLE_REMOVE_SUFFIX_CHARSset tetapi tanpa menyertakan &hasilnya DIR/&. Dengan ZLE_SPACE_SUFFIX_CHARSset untuk memasukkan &hasilnya DIR &.

Perhatikan bahwa penyelesaian tertentu dapat memberikan penghapusan suffix sendiri atau perilaku penggantian yang menimpa nilai-nilai yang dijelaskan di sini.

mpy
sumber
Ya, saya tidak memperhatikan bahwa sampai Anda menyebutkannya, tetapi itu hanya terjadi setelah penyelesaian tab, terima kasih atas jawabannya, ini memberi saya apa yang saya butuhkan :)
scanny