В оболочке zsh
вы можете использовать l:length::string:
левый -флаг расширения параметра заполнения.
$ var=FF
$ echo ${(l:4::0:)var}
00FF
Чтобы применить его к каждому слову в файле:
printf '%s\n' ${(l:4::0:)$(<file)}
Обратите внимание, что этот оператор также обрезает слова, длина которых превышает 4 символа.
Как Камил заставил меня понять, что функциональность NBSP не будет служить мне почти в 95% случаев. Поэтому я могу отключить его, а для оставшихся 5% мне придется реализовать отдельный патч, позволяющий мне вставлять этот символ для всех приложений, которые мне понадобятся.
Предисловие :Чтобы быть уверенным в том же, я хочу представить вам, в чем для меня разница между консолью PTS и консолью TTY. PTS для меня — это GUI-консоли (графические ), которые мы открываем из среды рабочего стола, а TTY — это для меня CLI (командная строка ), которую мы открываем комбинацией ctrl -alt -Fn(n, представляющий номер сеанса и обычно от 1 до 7, 7 зарезервировано по умолчанию для графического сеанса X11 ).
Итак, основываясь на моих собственных поисках (см. выше ), я могу отключить символ NBSP в своей среде X11. Поскольку X11 является графической средой, отключение должно выполняться в графической среде.
Так что предлагаю реализовать это в скрипте автостарта (для меня из XFCE DE):
user@host:~$ cat <<EOF > $HOME/.config/autostart/setxkbmap_no_nbsp.desktop
[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=No NBSP
Comment=Disable NBSP key
Exec=/usr/bin/setxkbmap -option "nbsp:none"
OnlyShowIn=XFCE;
StartupNotify=false
Terminal=false
Hidden=false
EOF
Иногда из Libre Office Writer мне нужно вставить символ NBSP, но так как он отключен (см. выше ),Я все еще должен найти способ вставить этот символ.
Я предлагаю использовать Ctrl -Shift -пробел для замены.
Итак, для макроса (Доступно здесь :Инструменты → Макросы → Организовать макросы → LOdev Basic → Мои макросы > Стандартный > Модуль 1 > Редактировать):
REM ***** BASIC *****
' Based on : https://ask.libreoffice.org/t/special-characters/1089/3
Sub InsertNBSP
Dim oDoc as variant
oDoc = ThisComponent
Dim oCurrentController as variant
oCurrentController = oDoc.getCurrentController()
Dim oTextViewCursor as variant
oTextViewCursor = oCurrentController.getViewCursor()
Dim oText as variant
If IsEmpty(oTextViewCursor.Cell) Then
oText=oTextViewCursor.Text
Else
oText=oTextViewCursor.Cell.Text
End If
' NBSP unicode : https://www.compart.com/en/unicode/U+00A0
oText.insertString(oTextViewCursor,_
chr(clng("&H00A0&")),false)
End Sub
Примечание :Обратите внимание, что код юникода NBSP равен U+00A0, и, кроме того, в моем случае результирующий код записывается как$HOME/.config/libreoffice/4/user/basic/Standard/Module1.xba
А для привязки клавиш (Инструменты → Настройка… → Клавиатура )мы будем использовать Ctrl -Shift -пробел для привязки к функции макроса с именем InsertNBSP
Примечание :в моем случае результирующая ассоциация записывается по адресу$HOME/.config/libreoffice/4/user/registrymodifications.xcu
Основываясь на этом источнике я нашел способ показать все важные символы в vim(который является моим текстовым редактором пристрастия )окрашенным в зеленый цвет (в моем случае ). Это полезно в консоли TTY, потому что ничто не мешает набрать NBSP.
Важно :В зависимости от того, заходим ли мы в оболочку из консоли PTS или TTY , мы можем использовать символы Юникода (в первом случае )или частично (во втором случае, но, по-видимому, можно заставить TTY поддерживать полный юникод -не проверенный ).
Обязательное условие :перед добавлением следующих строк конфигурации убедитесь, что vim уже установлен
# See more here : https://vimhelp.org/options.txt.html#%27listchars%27
user@host:~$ mkdir.vim
user@host:~$ echo -e "set list\nset listchars=tab:\>\,trail:·,nbsp:?" >> $HOME/.vim/vimrc
Ноты:
Важно :этот метод работает из моей конфигурации, но я не знаю, работает ли он везде
Чтобы ввести символ табуляции (, см. другие коды ниже):
Символы Unicode из PTS:
⇥:СТРЕЛКА ВПРАВО НА ПОЛОС или вкладка (U+21e5)
☠:ЧЕРЕП И ПЕРЕКРЕСТОК(U+2620)
·:СРЕДНЯЯ ТОЧКА(U+00B7 или сокращенно U+B7)
Последним не обработанным случаем является консоль TTY. Как мне подсказал @Kamil , можно отключить NBSP из него, добавив следующие строки в файл $HOME/.bashrc:
user@host:~$ echo -e "bind '\"\302\240\":\" \"'" >> $HOME/.bashrc
На данный момент мы можем отключить символ NBSP из X11, а также оболочку PTS bash и vim в PTS с setxkbmap -option "nbsp:none"
(, чтобы сделать его постоянным. Я реализую его в сценарии автозапуска, расположенном в$HOME/.config/autostart
). Мы также можем отключить оболочку TTY bash с помощью bind '"\302\240":" "'
в $HOME/.bashrc
.Нас можно предупредить об использовании NBSP (и других проблемных символов )с vim в TTY с конфигурацией listchars
в $HOME/.vim/vimrc
. Наконец, мы всегда можем добавить некоторые нужные символы NBSP в Libre Office Writer (, что также зависит от X11, поэтому NBSP предотвращается )при перенаправлении сочетания клавиш NBSP на другую комбинацию клавиш.
В заключение я бы сказал, что все различные случаи среды не рассматриваются, но я думаю, что сказанное здесь является хорошей отправной точкой, чтобы найти способ для других случаев.