10

好的,我相信这很简单,但它让我发疯。我最近去开发一个程序,我不得不及时退后一点并使用 Redhat 9。当我从运行 KornShell (ksh) 的标准 xterm 在命令行上键入时,我到达了line 屏幕向右滑动(切断我命令的左侧),而不是将文本换行到新行。这对我来说很困难,因为我不能直接从命令行轻松地复制和粘贴上一个命令。我必须查看历史记录并从那里粘贴命令。如果您想知道,我会执行很多命令行 awk 脚本,这些脚本会导致行变得很长。

有没有办法强制命令行换行而不是将可见性转移到我正在输入的命令的右侧?

我已经倾注了手册页选项,但没有运气。

我在跑:

  • XFree86 4.2.99.903(174)
  • KSH 5.2.14。

谢谢。

4

6 回答 6

6

你做了man ksh吗?

你想做一个set -o multiline.

摘自man ksh

多行:

对于长于屏幕宽度的行,内置编辑器将在屏幕上使用多行。这可能不适用于所有终端。

于 2008-09-30T12:41:02.753 回答
4

eval $(resize) 应该这样做。

于 2009-11-24T18:44:15.273 回答
2

简单的答案是:

$ set -o multiline

早于 5.12 的 ksh,就像 NetBSD 6.1 附带的 ksh 一样,没有这个选项。您将不得不关闭当前的交互式输入行编辑模式,通常是 emacs:

$ set +o emacs

这完全关闭了许多功能,例如制表符完成或使用“向上箭头”键回滚上一个命令。

如果您决定以某种方式习惯 emacs 模式,请记住 ^a 转到行首(“Home”键不起作用k)并且 ^e 转到行尾。

于 2013-09-12T02:13:05.690 回答
2

如果可能,尝试通过添加 \ 将命令分解为多行,即:

$我的命令-a foo \
  -f 酒吧\
  -c 差异
于 2008-09-26T20:36:29.227 回答
0

我不知道强制外壳换行的方法,但我会问你为什么要写那么长的行。使用 awk 脚本,我只需将脚本用单引号括起来,然后在我想要的地方换行。如果您在脚本中需要单引号,它只会变得棘手——如果您同时需要单引号和双引号,它就会变得非常棘手。实际上,规则很简单:用单引号包裹整个脚本,当你想在脚本中使用单引号时,写'\''. 第一个引号终止前一个单引号字符串;反斜杠单引号产生单引号;最后一个单引号开始一个新的单引号字符串。如果您需要为 eval 或类似的东西转义这些字符,那真的很麻烦。

另一个问题是 - 为什么不启动编辑器。因为我是一个顽固的 vim 疯子(好吧 - 我已经使用 vi 超过 20 年了,所以它比其他替代品更容易),我将 Korn shell 设置为 vi 模式(set -o vi),并且可以执行 escape-v 以在我输入的任何内容上启动编辑器。

于 2008-09-27T05:39:57.517 回答
0

这是一个务实的答案,但是当这对我来说是个问题时,我通常会这样做:

strings ~/.history | grep COMMAND

或者

strings ~/.history | tail

(历史文件中有一点二进制数据,因此是“字符串”)

于 2008-09-30T12:55:41.737 回答