结合tig使用emacs
Table of Contents
emacs中已经有了 magit
helm-ag
counsel-ag
等很多好用的东西了。但
是有时候我还是推荐 tig 这个工具。推荐理由就是一个字:快。做一些简单的
配置后,用起来还是很不错的。
1 做一点简单的配置先
tig可认通过edit命令直接调出编辑器来编辑对应行的文件。我希望配置成emacs
来编辑。默认是使用git的默认编辑器。对于tig,可以通过设置 GIT_EDITOR
环境变量来实现。把下面这句话写到 ~/.bashrc
就可以了。
alias tig='GIT_EDITOR="emacsclient --no-wait" tig'
配置好编辑器后,在tig中直接使用 e
就可以调用Emacs来编辑对应文件的对
应行了。这样配置后,结合后面tig的各种view,可以精准地定位到文件的某行
然后使用emacs打开它。
默认的tig配置文件在 ~/.tigrc
,我只做了很少一些配置:
bind generic 1 move-first-line bind generic 2 move-last-line bind main 1 move-first-line bind main 2 move-last-line # can exec git command #bind status b !git branch bind status r refresh # Change grep view to be similar to `git grep` format set grep-view = file-name:yes line-number:yes,interval=1 text
由于 g
默认绑到tig的 grep views
。所以我把1和2分别绑定到跳转到第一
行和最后一行。怎么写配置可以参考 这里 。
接下来讲一下tig中的两个我常用的view。
2 grep view(g)
grep整个git工程。非常快。默认绑到 g
上。按下 g
后,输入 test
,会把全部包含 test
的行全部找出来。
它支持vim like的search操作。可以使用 /
n,N
来在结果中继续搜索。
我觉得它的好处是 regexp
是我比较熟悉的。不像有时候在打开 helm-ag
或者 counsel-ag
,我不知道怎么样才能正确区配。
3 status view(s)
R
: refreshu
: 在unstage和stage状态中切换,对于同一文件,unstage->staged
会覆盖stage中的内容,应该是git add
操作。staged->unstage
,会保留 unstage状态中的内容,应该是调用了git reset HEAD <filename>
!
: 只能作用于unstaged的modified状态的文件。git checkout -- <filename>
。[ ]
C
: commit。但是我这样设置了编辑器后,就没法在tig中commit了。 还有点问题。commit还是自己用命令来搞吧。
4 配置tig的补全
参考代码中的 tig-completion.zsh
文件:
#compdef tig # # zsh completion wrapper for tig # ============================== # # You need to install this script to zsh fpath with tig-completion.bash. # # The recommended way to install this script is to copy this and tig-completion.bash # to '~/.zsh/_tig' and '~/.zsh/tig-completion.bash' and # then add following to your ~/.zshrc file: # # fpath=(~/.zsh $fpath) _tig () { local e e=$(dirname ${funcsourcetrace[1]%:*})/tig-completion.bash if [ -f $e ]; then . $e fi }