gpt4 book ai didi

vim - 来自 vim 的 git blame 自定义脚本

转载 作者:行者123 更新时间:2023-12-05 03:12:39 31 4
gpt4 key购买 nike

我想要从 vim 中使用 git blame 的最小方式(我不想使用整个 Fugitive 插件)。我现在拥有的是:

此函数来自 vim 帮助页面,使我能够在临时缓冲区中打开 shell 命令。

function! s:ExecuteInShell(command)
let command = join(map(split(a:command), 'expand(v:val)'))
let winnr = bufwinnr('^' . command . '$')
silent! execute winnr < 0 ? 'botright new ' . fnameescape(command) : winnr . 'wincmd w'
setlocal buftype=nowrite bufhidden=wipe nobuflisted noswapfile nowrap number
echo 'Execute ' . command . '...'
silent! execute 'silent %!'. command
silent! execute 'resize ' . line('$')
silent! redraw
silent! execute 'au BufUnload <buffer> execute bufwinnr(' . bufnr('#') . ') . ''wincmd w'''
silent! execute 'nnoremap <silent> <buffer> <LocalLeader>r :call <SID>ExecuteInShell(''' . command . ''')<CR>'
echo 'Shell command ' . command . ' executed.'
endfunction
command! -complete=shellcmd -nargs=+ Shell call s:ExecuteInShell(<q-args>)

连同上述功能我想做的是:

noremap <leader>b :Shell git blame -L line(".") - 5, line(".") + 5 %<cr>

为当前缓冲区中光标位置周围的行获取一个 git blame 窗口。

现在我有两个问题:

1:如何使以只读方式打开的暂存缓冲区,以便我可以仅使用 q 将其关闭?我想在函数中进行此更改,以便所有: Shell 命令都可以用 q 关闭。

2: 我怎样才能得到 line(".") - 5 扩展到当前行 - 5 行号?

最佳答案

要使缓冲区只读且不可修改,您可以放置​​

setlocal readonly nomodifiable

在你的函数结束时。

对于你的下一个问题,你可以使用executeeval

noremap <leader>b :execute "Shell git blame -L " . eval(line(".")-5)) . ",+10 %"<cr>

我建议阅读这些描述和一般的帮助:


这里还有 linkwikia 上提到的功能.

关于vim - 来自 vim 的 git blame 自定义脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051496/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com