如何在Vim中调用sudo命令并传入自定义Vim函数返回的路径参数
实现Vim中调用sudo命令并传入自定义路径参数,同时模拟rspec-vim的控制台切换效果
需求说明
现有文件路径如 /home/me/projects/project_name/the_part/i_wanna/keep.yestheextensiontoo,已编写Vim函数CurrentPath()用于截取路径的指定部分(最终得到the_part/i_wanna/keep.yestheextensiontoo)。需要将该函数的返回值作为参数传入sudo bin/test命令,绑定F4快捷键,实现类似rspec-vim的效果:执行命令时切换到控制台显示执行过程,完成后按回车键返回Vim。
解决步骤
1. 修正快捷键映射
原映射写法无法正确调用CurrentPath()并传入参数,需要使用Vim的表达式嵌入语法%{...}来执行函数并插入返回值。同时先执行:w保存当前文件,再执行外部命令:
nnoremap <F4> :w<CR>:!sudo bin/test %{CurrentPath()}<CR>
2. 效果说明
- 按下F4后,Vim会先保存当前文件
- 随后执行
sudo bin/test命令,并将CurrentPath()返回的路径作为参数传入 - 命令执行时,Vim会话会被替换为控制台界面,显示命令的执行输出
- 命令执行完成后,按下回车键即可回到Vim会话
3. 可选:调整路径截取逻辑
如果后续需要调整路径截取的起始位置,只需修改CurrentPath()函数中的spl[4:-1]索引:
- 例如,若要从
the_part开始截取,对应数组索引为5,则改为spl[5:-1] - 函数修改后重新加载即可生效
内容的提问来源于stack exchange,提问作者Jose Piccioni
相关产品推荐
相关产品推荐

