Vim - 在mercurial中提交时显示差异;

Jac*_*Leo 4 vim diff mercurial hook commit

在我的.hgrc我可以提供一个编辑器或命令来启动一个包含提交选项的编辑器.

我想编写一个启动的方法或别名$ hg ci,它不仅会在Vim中打开消息,还会分割窗口并打印出来$ hg diff.

我知道我可以通过使用+{command}选项为vim提供参数.因此启动$ vim "+vsplit"会进行拆分,但任何其他选项都会转到第一个打开的窗口.所以我假设我需要一个特定的功能,但我没有编写自己的Vim脚本的经验.

该脚本应该:

  • 用空缓冲区打开新的垂直拆分(vnew可能)
  • 在空缓冲区启动 :.!hg diff
  • 将空缓冲区文件类型设置为diff :set ft=diff

我写过这样的功能:

function! HgCiDiff()
    vnew
    :.!hg diff
    set ft=diff
endfunction
Run Code Online (Sandbox Code Playgroud)

.hgrc我添加选项:editor = vim "+HgCiDiff()"

它有点工作,但我希望分裂的窗口在右侧(现在它在左侧打开)并且mercurial消息将是聚焦窗口.也:wq可以设置为临时快捷方式:wq<CR>:q!(假设mercurial消息是重点).

有什么建议让这个更有用而且不那么厚实?

更新:我发现vim分裂指南如此改变vnew,rightbelow vnew打开右侧的差异.

Jac*_*Leo 5

所以我扩展了自己的代码:

function! HgCiDiff()
    "In .hgrc editor option I call vim "+HgCiDiff()"
    "It opens new split with diff inside
    rightbelow  vnew
    :.!hg diff
    set ft=diff
    saveas! /tmp/hgdiff.txt
    execute "normal \<c-w>w"
endfunction
Run Code Online (Sandbox Code Playgroud)

然而它错过了:wq映射:wqa,但使用:wqa并不那么难.

我的vimrc的来源就设在这里:http://hg.jackleo.info/vim-configs/src/08df5cb9d143/vimrc
我hgrc的来源就设在这里:http://hg.jackleo.info/home-configs/src /22f5fb47a7d2/.hgrc

更新:根据Randy Morris的建议,我更新了我的代码,现在它可以按照我的意愿运行.谢谢!随着时间的推移,还增加了一些额外的功能.

function! HgCiDiff()
    "In .hgrc editor option I call vim "+HgCiDiff()"
    "It opens new split with diff inside
    rightbelow  vnew
    setlocal buftype=nofile
    :.!hg diff
    setlocal ft=diff
    wincmd p
    setlocal spell spelllang=en_us
    cnoremap wq wqa
    cnoremap q qa
    start
endfunction
Run Code Online (Sandbox Code Playgroud)