【问题标题】:How to put vi replace commands in bashrc如何在 bashrc 中添加 vi 替换命令
【发布时间】:2016-12-12 12:50:34
【问题描述】:

在vi中可以通过以下命令全局替换字符串

:%s/strtoreplace/replacedstr/g

是否可以将它放在 .bashrc 中(通过某些函数可能会说 vireplace() ),这样就可以在终端中运行相同的命令而无需打开文件。此外,字符串 (strtoreplace,replacedstr) 应该是提示输入 ($@),以便它适用于任何想要用任何其他字符串替换的字符串? 我想要类似的东西

function vireplace() { vim :%s/$@/$@/g  $@ ;} 

【问题讨论】:

  • 嗨@Andy,你的链接很有帮助。但是有什么方法可以放入 bashrc 并使用任何提示输入吗?
  • 为什么不在函数中使用sed
  • 嗨@cdarke,是的,sed 将是最好的选择(我也喜欢 bash 脚本:))。我只是在徘徊,如果它可以用 vim 完成。

标签: bash vim vi


【解决方案1】:

您可以使用-c(命令)选项。例如:

vireplace() { vi -c "s/$1/$2/g"  -c "wq" $3; }

vireplace 1 x gash.txt

这会将文件 gash.txt 中每次出现的“1”替换为“x”。 -c "wq" 确保它不是交互式的 - 如果您也想交互式地使用它,请忽略它。

但老实说,我不明白你为什么要使用 vimsed 可以简单地做同样的事情。

【讨论】:

  • 嗯,vim 的正则表达式比 sed 的更强大。但是我只会使用 perl。
  • sed 支持扩展的 RE,带有 -E 选项,但自 5.10 以来,它仍然不如 Perl 强大。然而,这个问题具体是一个直接的替换。 sed 的占用空间也比 perl 小得多。
  • 我的sed 接受-E 但没有记录它(它只列出-r);诡异的。 POSIX Extended 与 Basic RE 只是语法上的区别,而不是功能上的区别。 Perl 5.0 (1994) 已经具有前瞻功能,而 5.005 (1998) 添加了后瞻功能,POSIX RE 不支持这两者。
【解决方案2】:

你可以做一个函数调用vi(或ed),但是当其他人需要了解你构建的东西时,请使用sed

在编辑时,您可以使用一些私人调整,您可以将这些调整放在 .exrc(仅在您的私人帐户上)。
您可以在$HOME/.exrc中添加函数。

nnoremap <F2> :%s/strtoreplace/replacedstr/g<Enter>

另一个测试您正在处理的脚本的示例:

nnoremap <F9> :w<Enter>:!%:p<Enter>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 2018-03-25
    • 2013-11-21
    • 2018-08-04
    • 2013-02-05
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多