AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 668563
Accepted
Le Nain Jaune
Le Nain Jaune
Asked: 2021-09-12 02:44:17 +0800 CST2021-09-12 02:44:17 +0800 CST 2021-09-12 02:44:17 +0800 CST

在 shell 中处理 nbsp 字符

  • 772

当我使用“alt-gr”字符后跟一个“空格”字符时,我经常会错过我的输入,而不是输入“非中断空格字符”,即 nbsp。

管道命令示例:mount |<space>tailvsmount |<nbsp>tail 最后一个命令将触发错误(注意尾部..." tail" command unfindable...命令名称之前的可视空间,实际上是一个 nbsp 字符)。

所以我找到了一个非常适合我的解决方案,可以简单地中和 nbsp 字符:

setxkbmap -option "nbsp:none"

但是这种变化立即获得了整个系统,并且为了证明,在 LibreOffice Writer 中,如果我想在必须保持分组的两个单词之间添加一个 nbsp 字符,这不起作用。

从过去开始,由于那个该死的角色,我浪费了很多时间来确定无法正常工作的命令或脚本或服务无法启动的原因。

所以我问自己是否有解决方案使中和仅限于外壳(控制台、终端、vty、tty 等)?在 bash 或其他 shell ...

你能告诉我这个该死的 nbsp 角色在 shell 中的角色吗?何时何地使用它以及用于什么目的?我们失去了什么不使用它?

另一个建议:我们可以通过带有颜色的图形字符来显示它,而不是中和它吗?

bash shell
  • 1 1 个回答
  • 538 Views

1 个回答

  • Voted
  1. Best Answer
    Le Nain Jaune
    2021-09-17T06:03:28+08:002021-09-17T06:03:28+08:00

    正如 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 字符

    重要提示:此方法适用于我的配置,但我不知道它是否适用于任何地方

    要键入制表符(请参阅下面的其他代码):

    • 从外壳(来源):ctrl-shift-u 21e5

    • 来自 vim(来源):ctrl-v u 21e5

    来自 PTS 的 Unicode 字符:

    • ⇥ :向右箭头到 BAR或制表符 (U+21e5)

    • ☠ :骷髅和交叉骨(U+2620)

    • · :中点(U+ 00B7或简称 U+B7)

    从 TTY shell 控制台禁用 NBSP 字符

    最后一个未处理的情况是 TTY 控制台。正如@Kamil 建议我的那样,可以在 $HOME/.bashrc 文件中添加以下行来禁用 NBSP:

    user@host:~$ echo -e "bind '\"\302\240\":\" \"'" >> $HOME/.bashrc
    

    总结

    现在我们可以禁用 X11 中的 NBSP 字符,因此也可以在 PTS中禁用 PTS bash shell 和vimsetxkbmap -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 快捷键重定向到另一个组合键。

    最后,我会说所有不同的环境案例都没有得到处理,但我认为这里所说的是为其他案例找到方法的一个很好的起点。

    • 1

相关问题

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • 如何将带有〜的路径保存到变量中?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve