使用vim中的换行符打开光标下的文件

问题描述 投票:3回答:1

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

我所拥有的大多数文件都是按照以下方式格式化的,我想强调单引号和打开该文件之间的路径(为那些好奇的人为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寄存器中的先前路径

有任何想法来解决它或其他方法?清除寄存器:最后让@ f =''似乎也不起作用。

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

vim command keymapping
1个回答
3
投票

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

xnoremap <F8> y \| :exec "e" fnameescape(substitute(getreg('"'),'\n','','g'))<CR>
© www.soinside.com 2019 - 2024. All rights reserved.