【问题标题】:Error q : Command not found on Vim错误 q:在 Vim 上找不到命令
【发布时间】:2013-06-12 09:59:39
【问题描述】:

我创建了一个 bash 脚本:

#!/bin/bash 
su root -c vim $1 -c ':%s/^M//g' -c 'wq'

我的脚本必须删除文件中的所有 ^M(Windows 上的回车符),然后保存。

当我执行我的脚本时,它会返回:

/sequenceFiles/Sequence1.seq: wq: command not found

有人知道为什么吗? 感谢您的帮助。

【问题讨论】:

  • 有一个包叫tofrodos .. 使用这个包中的fromdos
  • 你可能还有像dos2unix这样的工具。

标签: linux vim command


【解决方案1】:

su 看到的是 -c,而不是 vim,并且 shell 抱怨未知命令。

您需要将命令作为一个参数传递给su

su root -c "vim $1 -c ':%s/^M//g' -c 'wq'"

【讨论】:

  • 现在,我遇到了一个问题:当我执行我的脚本时,它返回了这个错误:E486:找不到模式。但是 ^M 存在于我的文件中。为什么?
  • Vim(在 Unix 上)可以检测和处理 CR-LF 行结尾,请参阅 :help 'fileformat',这就是为什么没有显示 ^M 的原因,这也解释了 E486。您的问题是关于 su + Vim 调用错误,所以请不要不接受并将其变成一个漫长的故障排除会话!正如 cmets 所证明的那样,无论如何你都不应该使用 Vim。
  • 那么,我应该使用什么?用 Vi 代替?
  • 我会使用上面提到的fromdos / dos2unix(如果你有/可以安装它们),否则sed(它的s/// 几乎相同;如果你有谷歌解决方案)不确定); vi / Vim 用于交互式编辑!
  • 非常感谢您的耐心等待,您帮了我很多忙。
【解决方案2】:

man su 说:

`-c COMMAND'
`--command=COMMAND'
     Pass COMMAND, a single command line to run, to the shell with a
     `-c' option instead of starting an interactive shell.

试试

su root -c "vim $1 -c ':%s/^M//g' -c 'wq'"

【讨论】:

    【解决方案3】:

    虽然你可以用 vim 来做,但考虑更简单:

    perl -pi -e 's/\r\n/\n/' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 2018-06-13
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2016-03-24
      • 2016-07-12
      • 2016-11-02
      相关资源
      最近更新 更多