【问题标题】:Open a file under cursor with a line break in vim在vim中用换行符打开光标下的文件
【发布时间】:2013-12-06 00:16:56
【问题描述】:

我想设置一个键映射来打开一个在可视模式下突出显示的绝对路径文件名,该文件名可能在中间有一个换行符。

我拥有的大多数文件都以以下方式格式化,我想突出显示单引号之间的路径并打开该文件(对于那些好奇的人,格式化为 MSC NASTRAN):

INCLUDE '/directory/directory/directory/directory/
directory/filename'

困难的是拉动整个部分会导致路径中间出现 ^M 换行符。我的方法如下(遍历下面的 :map 命令):

  1. 从选择中拉出路径(存储到@0)
  2. 创建新寄存器@f,其中空字符串替换来自@0 的换行符
  3. 在@f中打开文件路径

    map <F8> y \| :let @f=substitute(strtrans(@0),'\^@','','g') \| :e <C-R>f<CR>
    

问题在于,如果在新文件路径上第二次运行,vim 会在更新@f 之前使用存储在@f 寄存器中的先前路径

有什么解决办法或其他方法吗?最后用 :let @f='' 清除寄存器似乎也不起作用。

我也没有管理员权限,因为这是一台工作计算机,所以我不认为我可以安装插件,但我还是 vim 的新手,任何想法表示赞赏。谢谢!

【问题讨论】:

    标签: vim command keymapping


    【解决方案1】:

    不需要辅助寄存器;使用:exec 来评估表达式并将结果用作命令的参数。我不确定strtrans() 是否具有某种优势,但直接替换\n 似乎可行。无论哪种方式,请确保使用fnameescape()。此外,请使用noremap 以避免递归映射,除非您需要它们。如果此特定映射仅用于可视模式,xnoremap 会更好。

    xnoremap <F8> y \| :exec "e" fnameescape(substitute(getreg('"'),'\n','','g'))<CR>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2017-01-01
      • 2011-01-26
      • 2010-10-23
      相关资源
      最近更新 更多