命令行在阅读困难症的情况下的使用

我对Linux还很陌生,而且由于我有阅读障碍,使用命令行工作对我来说是一种挑战。有什么辅助工具或建议可以帮助我解决这个问题吗?

4当你将文件拖入终端时,它会自动打印完整路径。当你按上箭头键时,它会自动打印最近的命令。 - karel
22这是一个好问题,但我很难想象你的问题是什么。请编辑并解释您最困扰的是什么。可能的解决方案可能比您想象的要简单(请参见其他评论)。 - dessert
2我不确定诵读困难是否会使命令行界面更加困难。我一直认为命令行界面的“单词”并不像常规语言那样依赖于自动化。在编程中,更注重模式识别,而这恰恰是诵读困难者相对擅长的事情,从平均水平来看,它不应该成为一个障碍。 - Jacob Vlijm
6键盘快捷键非常有帮助,可以在这里找到一些有用的:https://askubuntu.com/q/45521/507051 和 https://askubuntu.com/q/444708/507051 - dessert
1请尽量使用制表符自动补全,并使用像zsh或fish这样能够自动补全命令的shell。 - Panther
@dessert -- 阅读障碍会导致人们看到事物的顺序错乱;因此,最明显的问题就是拼写错误。 - ravery
@ravery 我明白了,只是大多数终端命令已经尽可能地简短和简单了,而且据我所知,选项补全应该会很有帮助。确切地说出问题的细节肯定会有所帮助,我担心现在的问题范围太广泛了。 - dessert
@dessert - 是的,但是即使两个字母也可能被交换。还有像grub-install而不是install-grub这样的问题。 - ravery
@LightnessRacesinOrbit - 是的,我没注意到直到编辑的时间已经过去了。 - ravery
@karel:为什么要把文件拖到终端里?而且怎么拖呢?使用命令行的目的不就是避免做那种(对我来说)极其困惑的事情吗? - jamesqf
4为了节省时间,我会将文件的图标拖到终端中,以打印出文件的路径,然后将其复制/粘贴到下一个命令中。 - karel
3Zsh实际上可以自动纠正命令名称中交换的字母!(手册页提供更多信息。) - SilverWolf
当我使用tcsh作为shell时,可以使用ESC-$来“拼写检查”命令。它可以捕捉到单个字符的拼写错误和字符位置颠倒的错误。这可能会很有用。 - Thorbjørn Ravn Andersen
1你可以尝试使用类似https://github.com/nvbn/thefuck这样的库,它可以根据输入错误自动推测可能的命令。 - ggdx
@jamesqf 此外,如果某个东西出现在Dash搜索中(程序、文件等),你需要知道它的位置,可以将其拖到终端中获取路径。不确定是否还有其他方法可以做到这一点。 - Clumsy cat
在很久以前,命令安装较少的情况下,tcsh能够通过M-$来拼写检查你的命令名称。 - Thorbjørn Ravn Andersen
8个回答

你可以尝试一些方法来改善你在命令行中的体验。
  1. 尽可能使用Tab键补全(通过按下Tab键自动填充部分输入的命令)。
  2. 按下(向上箭头键)自动打印上一条命令,并持续按下(上箭头键和下箭头键)来循环浏览命令历史记录。
  3. 将文件拖入终端以自动打印完整路径。
  4. 按下Alt+.(点号)插入上一条执行的命令中的最后一个参数(对于例如mkdir后跟cd非常有用)。
  5. 使用键盘快捷键(参见thisthis)。
  6. 使用Bash别名(参见thisthis)。
  7. 使用history,您可以查看命令历史记录,然后使用历史命令的编号重新执行命令(例如,使用!352重新执行第352条命令)。将其简化为h以便快速方便地访问。
  8. 使用反向终端搜索(按下Ctrl + R,然后开始输入)以匹配先前的命令;这是一种快速查找早期命令的方法。
  9. 使用一个能够自动补全命令和可选参数的Shell,例如Zshfish
  10. 在终端中使用增加读者阅读易读性的字体,例如“OpenDyslexic”。
  11. 在阅读时听取屏幕上的内容;启用像Orca这样的屏幕阅读器。您可以让它朗读一个单词、整个页面、逐字拼写单词、更改速度、音量、详细程度等。
  12. 在阅读时放大屏幕的一部分;看看那些可以使用键盘快捷键进行缩放的应用程序,比如Magnifier
  13. 高级:个性化输出显示方式,例如设置条件文本颜色。默认的Ubuntu发行版提供了几个增强终端的功能。例如,当您使用ls列出目录内容时,子目录以蓝色打印,文件名以白色打印,使得区分两者更容易。对于其他示例,请查看人们分享的许多个性化设置。其中一些肯定值得尝试。一个很好的起点是受欢迎的Awesome dotfiles存储库。

1@flith 应该是 !352 而不是 history 352,对吧? - pomsky
2我目前已经改用了适合阅读困难者的字体,并在终端中启用了颜色。这对阅读和减轻头痛有所帮助。我仍在努力阅读《Ubuntu Unleashed》和《Linux Bible》这些书籍。Vim和其他一些编辑器可能会提供一些答案。 - Dale Davidson
1Ctrl + R - 我以前从来没见过这个。真是太有用了。 - Noel Evans

我会尝试给出一个全面的答案。如果我漏掉了什么,请留言,我会补充上去。
Tab键自动完成功能
Tab键自动完成是您的最大帮助。按下Tab键将完成命令,只要它在独特可识别的范围内。按两次Tab键将显示选项列表。输入足够的字符来确定您想要的选项,然后再次按Tab键将完成它。这个功能也适用于路径/文件名。
例如,假设我有一个名为Paul的用户,他在他的Downloads文件夹中有文件text123.txt和text124.txt:
我可以输入/h,然后按下Tab键,bash将给我显示/home/。然后输入P,再按下Tab键,就能得到/home/Paul/。以此类推,直到我拥有完整的文件和路径。
路径/文件名扩展
自动完成还接受通配符*和?。?匹配一个字符,*匹配所有字符(或没有)。使用上述示例,我可以输入:

/h*/P*/Dow*/t*4*然后按下Tab,bash将给我返回/home/Paul/Downloads/text124.txt。如果我确定匹配到正确的文件,我可以直接按下Enter键执行命令而无需先展开它。

一些常见的目录引用:

  • ~表示您的主目录。
  • ..表示父目录。
  • .表示当前目录;以确保bash在正确的目录中查找。

键盘快捷键

使用上箭头和下箭头键可以浏览最近使用的命令列表。按下Ctrl+G退出历史记录搜索模式。按下Alt+.重复上一个命令的最后一个参数。

别名

Bash允许您指定别名。如果您经常以相同的错误方式输入命令,可以通过编辑~/.bashrc并添加以下行来添加自定义别名:

alias agi='apt-get install'
alias mkdri='mkdir'

请重新登录以激活它们。

4**~不是一个别名*,而是由bash根据EXPANSION/Tilde Expansion in man bash中的描述进行展开*的 – 例如,~被展开为$HOME~+被展开为$PWD~-被展开为$OLDPWD。实际上,您可以设置例如alias ~='cd ~',这对于快速返回到主目录非常有用,但这与展开完全不同(并且不会造成任何问题)。 - dessert
嗯,“man bash”有一个完整的“EXPANSION”部分……你已经涵盖了一些路径名扩展。 - dessert
在我的系统上,我似乎无法让大多数其他扩展在命令行界面中工作。但是我会重新组织以修复波浪线的解释。 - ravery
我刚刚试了一下在浏览最近的命令时按下Ctrl+G,但是没有任何反应。它应该做什么?也许它不起作用是因为我改变了一些按键绑定... - wjandrea
根据Bash手册,它应该退出命令历史搜索,即将您返回到空白提示符。嗯,对我也不起作用...我猜我应该删除那部分。也许与搜索时输入相关联。 - ravery
1@WJAndrea:Shell对...确实有一些特殊的支持;例如,cd ..实际上会从当前工作目录中移除最后一个路径段,而不是添加一个..段。 - ruakh
1@WJAndrea和ravery:Ctrl+G退出你用Ctrl+R开始的命令历史搜索。一旦开始,只需输入命令的开头部分,它就会显示最新匹配的命令。使用Ctrl+R翻阅匹配的命令,使用Enter运行命令,或使用改变光标位置的键(如Home、End、箭头等)编辑命令。这种搜索模式非常有帮助,如果你想通过命令名称找到最近的命令-试试吧,它会让你大吃一惊的。;) - dessert

Zsh shell(至少是我使用的版本Oh-my-ZSH)具有一个功能,如果您在命令和文件名中犯了小错误,它会自动纠正您。
$ pyhton scirpt.py
zsh: correct 'pyhton' to 'python' [nyae]? y
zsh: correct 'scirpt.py' to 'script.py' [nyae]? y
...

你可以在你的.zshrc文件中添加以下行来启用它:
# Uncomment the following line to enable command auto-correction.
ENABLE_CORRECTION="true"

可以将其设置为自动化吗?我知道这会带来麻烦。mr fr- ./ -oe--rvoeorrpne-st --> zsh:自动更正为rm -rf / --no-preserve-root - cat
1@cat 据我所知,不是这样的。你提到的原因是其中一个原因,但它也会阻止你执行合法操作,比如 mv file1 file1.old,因为它会将第二个文件名更正为第一个,使其成为无操作。 - Graipher
1tcsh 也可以做到这一点。 - Peter - Reinstate Monica

你可以尝试在终端中使用开放性诵读字体。这可能有助于阅读文本。前提是你正在使用默认的Ubuntu终端,我希望它与GNOME终端相同。

https://opendyslexic.org/

  1. 下载它。
  2. 安装字体。
  3. 打开终端,导航到菜单栏并选择编辑->配置文件首选项
  4. 打开自定义字体并选择Open Dyslexic Mono字体。

安装可以使用sudo apt install fonts-opendyslexic完成。 - Chai T. Rex

补充@pomsky的回答,我想再加几点:
  • 学习如何自动化事务,特别是学习如何使用for循环,了解read的工作方式,理解if语句的工作原理,了解[ ][[ ]]的含义,使用非官方Bash严格模式,因为一旦脚本有效,就更容易避免错误。
  • 如果可能的话,安装bash-completion包(根据版本可能有不同名称)。
  • 在危险情况下(例如使用sudo),使用带有-i选项的rm命令,或者安装并使用rmtrash(将文件放入回收站)。
  • 在拷贝文件时使用带有-n选项的cp命令,这样可以避免覆盖现有的文件。(当进行递归拷贝时更加有用)。
  • 学习如何使用~/.bashrc文件,它可以使$PS1变量对您更加清晰。
而且,如果你年轻的话,可能会是最困难的:
- 尽量更好地了解你所从事工作的最新技术和常用工具。 - 例如,如果你是一名学生正在学习如何使用C++进行开发,尝试在你的`~/.bashrc`文件中设置`$CXXFLAGS`。(例如:根据你的C++版本,比如Ubuntu上的C++11,可以设置为`export CXXFLAGS=" -std=c++17 -fmax-errors=1 -Wall -Wextra -pedantic -Werror "`),然后使用`make main.cpp`进行编译,你的选项将被传递过去。请注意,这组选项非常严格:任何正确和标准的代码都将被视为错误,并阻止你进行编译。

在成为一名Unix工程师并在多个不同平台(Linux、AIX和Solaris)上熟练使用Shell多年后,我才意识到自己患有阅读障碍。
不同的人受到阅读障碍的影响程度不同,所以“我们看事物顺序颠倒”的假设可能是一种过于简化和令人沮丧的说法,如果你没有这样的问题的话。实际上,我发现终端默认的等宽字体非常易读(对我来说,白底黑字很好看)。
Shell很难学习,有很多缩略词和不直观的约定惯例,这让那些喜欢简单直接、规律性语言的人很难学会。
我现在明白,大多数阅读障碍者通过第一手经验学习和记忆。我们非常不擅长死记硬背或消化冗长理论。但一旦我们通过应用消化理论,通常就能深入理解并牢记于心。因此,请重点关注找到Shell的示例并通过亲手输入并理解每一行代码的方式进行尝试。实验,打破束缚,彻夜修复。
随着时间的推移,你会记住越来越多的命令,并且能够发现开发人员在实现程序时所采用的模式,这些模式可以应用到下一个命令中。然而,并不是所有的命令在传递参数时都遵循相同的约定,所以学习类似的命令可能需要一些时间。
和其他人一样,几年后这将变得轻车熟路。然而,随着时间的推移,你可能会获得词序错乱的优势,通过直觉知道如何解决问题,并使用你第六感般的能力来发现模式或打破模式的复杂根本原因分析。
除了制表符补全和上方向键建议之外,我发现大多数答案只会让体验更加压抑。忽略它们。简化是关键。

尝试使用“FISH”友好交互式Shell。 可在软件仓库中获取。
我曾经在使用BASH的命令行时感到困惑。 Fish会记住所有最近的命令并提供自动补全功能。 sudo apt install fish 然后在bash中输入:fish。 如果你喜欢它,请查找如何将其设置为默认Shell的说明。 还有其他可用的Shell;FISH是我的选择。 一旦你开始使用,你可能会喜欢它。

所有的Shell我所了解的都会记住最后使用的命令和Tab补全。 - phuclv

有一种工具,它就像一个笑话和一个无价的助手之间的桥梁。

https://github.com/nvbn/thefuck

你可以在这个帖子中尝试其他建议之外再试试这个。主要的想法是,当你写错了什么东西并收到未知命令或其他情况时,这个工具会纠正并重新执行它。
它不是万能药,但值得一试。