在 shell 中處理 nbsp 字元
當我使用“alt-gr”字元後跟一個“空格”字元時,我經常會錯過我的輸入,而不是輸入“非中斷空格字元”,即 nbsp。
管道命令範例:
mount |<space>tail
vsmount |<nbsp>tail
最後一個命令將觸發錯誤(注意尾部..." tail" command unfindable...
命令名稱之前的可視空間,實際上是一個 nbsp 字元)。所以我找到了一個非常適合我的解決方案,可以簡單地中和 nbsp 字元:
setxkbmap -option "nbsp:none"
但是這種變化立即獲得了整個系統,並且為了證明,在 LibreOffice Writer 中,如果我想在必須保持分組的兩個單詞之間添加一個 nbsp 字元,這不起作用。
從過去開始,由於那個該死的角色,我浪費了很多時間來確定無法正常工作的命令或腳本或服務無法啟動的原因。
所以我問自己是否有解決方案使中和僅限於外殼(控制台、終端、vty、tty 等)?在 bash 或其他 shell …
你能告訴我這個該死的 nbsp 角色在 shell 中的角色嗎?何時何地使用它以及用於什麼目的?我們失去了什麼不使用它?
另一個建議:我們可以通過帶有顏色的圖形字元來顯示它,而不是中和它嗎?
正如 Kamil 讓我意識到的那樣,NBSP 功能在將近 95% 的時間裡都不會為我服務。所以我可以禁用它,對於剩下的 5%,我將不得不實現一個獨特的更新檔來允許我為所有需要的應用程序插入這個字元。
前言:為了確定要向您介紹的內容相同,對我而言,PTS 控制台和 TTY 控制台之間的區別是什麼。PTS 是我們從桌面環境打開的 GUI 控制台(圖形),TTY 是我們使用ctrl-alt-Fn組合打開的 CLI(命令行) (n 代表會話編號,通常在 1 之間和 7、7 預設保留給 X11 圖形會話)。
從 X11 環境中禁用 NBSP 字元
因此,根據我自己的搜尋(見上文),我可以從我的 X11 環境中禁用 NBSP 字元。由於 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 快捷鍵
有時我需要從 Libre Office Writer 插入 NBSP 字元,但由於它被禁用(見上文),我仍然必須找到插入此字元的方法。
我建議使用Ctrl-Shift-space進行替換。
所以對於宏(在此處可用:工具 → 宏 → 組織宏 → 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 unicode 程式碼是 U+00A0 並且在我的情況下,生成的程式碼寫在
$HOME/.config/libreoffice/4/user/basic/Standard/Module1.xba
對於鍵綁定(工具 → 自定義… → 鍵盤),我們將使用Ctrl-Shift-space與名為InsertNBSP的宏函式綁定
注意:在我的情況下,生成的關聯寫在
$HOME/.config/libreoffice/4/user/registrymodifications.xcu
從 vim 中顯示一些字元(包括 NBSP)
基於這個來源,我找到了一種方法來顯示vim(這是我的偏好文本編輯器)中所有重要的字元(在我的例子中)。這在 TTY 控制台中很有用,因為沒有什麼能阻止輸入 NBSP。
重要提示:根據我們是從PTS還是TTY控制台訪問 shell,我們可以使用 unicode 字元(在第一種情況下)或部分(在第二種情況下,但顯然可以使 TTY 支持完整的 unicode - 不是測試)。
先決條件:在添加以下配置行之前,請確保已安裝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
成績:
- 選項卡將顯示所有選項卡以區分空格組,它們將被替換為大於 (>)
- trail將顯示一行末尾的所有尾隨空格,它們將被中間點 (·) 替換;要輸入此 Unicode,請參見下文
- nbsp將顯示在大多數情況下將無用的所有 NBSP 字元(不是說從不),它們將被問號 (?)
- 雖然不推薦這樣做,因為它只能從 PTS 控制台工作(除非我們設法從 TTY 集成完整的 unicode 支持),但可以使用一些更有意義或異國情調的 unicode 字元;例如選項卡可以由 ⇥ 和 nbsp 由“☠”組成(見下文)
使用 PTS 控制台中的 unicode 字元
重要提示:此方法適用於我的配置,但我不知道它是否適用於任何地方
要鍵入製表符(請參閱下面的其他程式碼):
來自 PTS 的 Unicode 字元:
從 TTY shell 控制台禁用 NBSP 字元
最後一個未處理的情況是 TTY 控制台。正如@Kamil 建議我的那樣,可以在 $HOME/.bashrc 文件中添加以下行來禁用 NBSP:
user@host:~$ echo -e "bind '\"\302\240\":\" \"'" >> $HOME/.bashrc
總結
現在我們可以禁用 X11 中的 NBSP 字元,因此也可以在 PTS中禁用 PTS bash shell 和vim
setxkbmap -option "nbsp:none"
(為了使持久性,我在位於 的自動啟動腳本中實現它$HOME/.config/autostart
)。我們也可以使用bind '"\302\240":" "'
in禁用 TTY bash shell$HOME/.bashrc
。我們可以警告在 TTY中使用 NBSP(和其他有問題的字元)和vimlistchars
並在$HOME/.vim/vimrc
. 最後,我們總是可以在 Libre Office Writer 中添加一些想要的 NBSP 字元(這也取決於 X11,因此阻止了 NBSP),將 NBSP 快捷鍵重定向到另一個組合鍵。最後,我會說所有不同的環境案例都沒有得到處理,但我認為這裡所說的是為其他案例找到方法的一個很好的起點。