从当前缓冲区读取并在函数或命令中使用它

时间:2015-01-07 15:10:58

标签: vim

我试图绑定F5以在当前文件上运行sass --update。我被困的地方是输出。我决定的解决方案是在输入文件的第一行包含输出文件的注释,例如:
//C:\Users\wuffie\Projects\output.css
如何读取线条,修剪起始斜线,并将其放入我的命令中?它需要一个完整的功能吗?以下是我到目前为止的情况:
au BufEnter,BufNew *.sass nmap <F5> :w<CR>:tabnew <bar> silent :r !sass --update expand('%:p'):

1 个答案:

答案 0 :(得分:1)

让我们首先清理你的命令(为简洁起见,我省略了:autocmd;或者,您可以将:map放入~/.vim/after/ftplugin/sass.vim,假设文件类型被检测为{{1} }}):

sass
  • You should use :noremap;它使映射不受重映射和递归的影响。
  • 使用nnoremap <buffer> <F5> :w<Bar>tabnew<Bar>silent :r !sass --update %:p<CR> 关键字,仅为文件的缓冲区定义映射,而不是污染其他缓冲区。
  • 在任何地方使用<buffer>,并添加缺少的结论<Bar>
  • <CR>无法正确评估,并且没有必要,expand()已由%:p解释。 (但我们需要扩展名,请继续阅读):

现在,让我们将第一行的读数构建到:

:r

这使用nnoremap <buffer> <F5> :execute 'w<Bar>tabnew<Bar>silent :r !sass --update ' . expand('%:p') . ':' . getline(1)[2:]<CR> 来构建命令行,使用:execute来访问文件的第一行。我使用String索引来切断前两个注释字符(getline(1));你也可以在这里使用[2:],或者strpart()用于更详细的案例。为了使这个防弹,请将最终表达式包装在substitute()

shellescape(..., 1)