Vim 将突出显示的文本发送到 Git 提交的函数
Vim Function to Send Highlighted Text to a Git Commit
问题:
假设我的 vim 缓冲区中有以下文本:
This is a commit msg.
进一步假设我有一个 git 存储库位于 ~/my_repo
。
目标: 制作一个 vim 脚本,以便我可以突出显示上面的文本,并将其作为 git 提交消息发送到 ~/my_repo
。它看起来像
:'<,'>Commit ~/my_repo
它的 repo 参数也会自动完成。
尝试的解决方案:
首先,自动完成功能(据我所知,我觉得这样可以吗?):
function! GitLocations()
return find $HOME -name '.git' -printf '%h\n' "generates a list of all folders which contain a .git dir
endfunction
接下来,实际的 git 提交函数,它是不完整的:
function! CommitTextGitRepo(l1, l2, loc)
let s:msg = ??? " how do I make this the highlighted text from line l1 to line l2?
execute '!cd ' . a:loc . '&& git commit --allow-empty -m \"' . s:msg '\"'
endfunction
假设我能弄清楚如何让 CommitTextGitRepo()
在上面工作,我最后需要的是这个(我认为):
command! -nargs=* -complete=custom,GitLocations -range Commit call CommitToGitRepo(<line1>, <line2>, <q-args>)
我很亲近。我该如何完成呢? :)
join(getline(a:l1, a:l2),"\n")
应该可以解决问题
我宁愿使用一个局部变量,你可能想对消息进行 shellescape,使函数接近这个
function! CommitTextGitRepo(l1, l2, loc)
let l:msg = join(getline(a:l1,a:l2), "\n")
execute '!cd ' . a:loc . '&& git commit --allow-empty -m ' . shellescape(l:msg)
endfunction
问题:
假设我的 vim 缓冲区中有以下文本:
This is a commit msg.
进一步假设我有一个 git 存储库位于 ~/my_repo
。
目标: 制作一个 vim 脚本,以便我可以突出显示上面的文本,并将其作为 git 提交消息发送到 ~/my_repo
。它看起来像
:'<,'>Commit ~/my_repo
它的 repo 参数也会自动完成。
尝试的解决方案:
首先,自动完成功能(据我所知,我觉得这样可以吗?):
function! GitLocations()
return find $HOME -name '.git' -printf '%h\n' "generates a list of all folders which contain a .git dir
endfunction
接下来,实际的 git 提交函数,它是不完整的:
function! CommitTextGitRepo(l1, l2, loc)
let s:msg = ??? " how do I make this the highlighted text from line l1 to line l2?
execute '!cd ' . a:loc . '&& git commit --allow-empty -m \"' . s:msg '\"'
endfunction
假设我能弄清楚如何让 CommitTextGitRepo()
在上面工作,我最后需要的是这个(我认为):
command! -nargs=* -complete=custom,GitLocations -range Commit call CommitToGitRepo(<line1>, <line2>, <q-args>)
我很亲近。我该如何完成呢? :)
join(getline(a:l1, a:l2),"\n")
应该可以解决问题 我宁愿使用一个局部变量,你可能想对消息进行 shellescape,使函数接近这个
function! CommitTextGitRepo(l1, l2, loc)
let l:msg = join(getline(a:l1,a:l2), "\n")
execute '!cd ' . a:loc . '&& git commit --allow-empty -m ' . shellescape(l:msg)
endfunction