如何使用vim函数作为参数执行sudo命令(在vim中)

lymnna71  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(100)

我的路径类似于/home/me/projects/project_name/the_part/i_wanna/keep.yestheextensiontoo
我写了这个函数:

function! CurrentPath()
  let filepath = expand("%")
  let spl = split(filepath, '/')
  let short = spl[4:-1]
  let newpath = join(short, '/')
  return newpath 
endfunction

字符串
我想将生成的修剪路径the_part/i_wanna/keep.yestheextensiontoo传递给sudo命令
我希望有这样的东西工作:

nnoremap <F4> :w !sudo bin/test CurrentPath()<CR>


理想情况下类似于rspec-vim的工作方式,在控制台中运行命令(替换了vim会话),然后当你按回车键(命令执行后),你就回到vim会话。

mpbci0fu

mpbci0fu1#

Map:

nnoremap <F4> :w !sudo bin/test CurrentPath()<CR>

字符串
!之后,除了一些特殊的项目,比如%#(参见:help cmdline-special)之外,所有的东西都传递给shell,所以你不能真正期望CurrentPath()在这里被计算。
最简单的方法是使用“表达式Map”,在运行时计算整个Map右侧:

nnoremap <expr> <F4> ':w !sudo bin/test ' .. CurrentPath() .. '<CR>'


当你按<F4>时,CurrentPath()被计算并与其余的连接,然后整个内容被发送到你的shell。

相关问题