【问题标题】:How can I replace a space a character for two other characters in linux with tr or sed command?如何用 tr 或 sed 命令替换 linux 中其他两个字符的空格?
【发布时间】:2014-10-03 19:40:23
【问题描述】:

我正在编辑我的 .vimrc 文件以将 vim 与 ranger 集成,并且我有以下代码:

fun! RangerChooser()
   exec "silent !ranger --choosefile=/tmp/chosenfile " . expand("%:p:h")
   if filereadable('/tmp/chosenfile')
      exec 'tabnew ' . system("cat /tmp/chosenfile")
      call system('rm /tmp/chosenfile')
   endif
   redraw!
endfun

问题是,当我尝试打开一个路径的文件时,该文件的路径中包含一个名称中包含空格的文件夹,它会失败,因为它会中继路径。我认为这是因为 ranger 在空格前没有使用反斜杠,所以可以理解。这发生在第四行的系统调用中。我添加了一些命令来插入反斜杠,但是“'”和 qoutes 存在一些问题。请问有人有解决办法吗?非常感谢!

【问题讨论】:

    标签: regex linux vim sed


    【解决方案1】:

    shellescape() 为您完成所有这些以及更多工作:

    exec "silent !ranger --choosefile=/tmp/chosenfile " . <b>shellescape(</b>expand("%:p:h")<b>)</b>

    【讨论】:

    • 非常感谢!但我仍然有这个错误:E172:只允许一个文件名。可能是什么?
    • @ivo:嗯。它发生在那条线上吗? fnameescape(shellescape(expand(…))) 有效吗?
    • @minitech 我认为您不会同时想要这两个。那最终会超过逃避的东西。
    • @ivo 哪一行正在生成 E172?我高度怀疑这是 minitech 的答案。我打赌它与 tabnew 一致,因此将系统函数包装在 fnameescape 中就足够了。
    • @FDinoff 谢谢!有效! :) fnameescape 必须在系统调用中!谢谢!!!
    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2011-03-30
    • 2020-11-24
    • 2019-01-03
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多