mirror of
https://github.com/amix/vimrc
synced 2025-06-23 06:35:01 +08:00
Updated plugins
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -15,13 +15,21 @@ COMMANDS *fugitive-commands*
|
||||
These commands are local to the buffers in which they work (generally, buffers
|
||||
that are part of Git repositories).
|
||||
|
||||
*fugitive-:G* *fugitive-:Gstatus*
|
||||
:G Bring up a summary window vaguely akin to git-status.
|
||||
:Gstatus Press g? or see |fugitive-mappings| for usage.
|
||||
|
||||
*fugitive-:Git*
|
||||
:Git [args] Run an arbitrary git command. Similar to :!git [args]
|
||||
but chdir to the repository tree first.
|
||||
:Git {args} Run an arbitrary git command. Similar to :!git [args]
|
||||
:G {args} but chdir to the repository tree first. For some
|
||||
subcommands, a Fugitive command is called instead.
|
||||
Invoking :Git push will call :Gpush for example.
|
||||
|
||||
*fugitive-:Git!*
|
||||
:Git! [args] Like |:Git|, but capture the output into a temp file,
|
||||
and edit that temp file.
|
||||
:Git! {args} Like |:Git|, but capture the output into a temp file,
|
||||
:Git --no-pager {args} and |:split| that temp file. Use :0Git to
|
||||
:Git -P {args} |:edit| the temp file instead. A temp file is always
|
||||
used for diff and log commands.
|
||||
|
||||
*fugitive-:Gcd*
|
||||
:Gcd [directory] |:cd| relative to the repository.
|
||||
@ -29,20 +37,16 @@ that are part of Git repositories).
|
||||
*fugitive-:Glcd*
|
||||
:Glcd [directory] |:lcd| relative to the repository.
|
||||
|
||||
*fugitive-:Gstatus* *fugitive-:G*
|
||||
:G Bring up a summary window vaguely akin to git-status.
|
||||
:Gstatus Press g? or see |fugitive-mappings| for usage.
|
||||
|
||||
*fugitive-:Gcommit*
|
||||
:Gcommit [args] A wrapper around git-commit. Unless the arguments
|
||||
given would skip the invocation of an editor (e.g.,
|
||||
-m), a split window will be used to obtain a commit
|
||||
message, or a new tab if -v is given. Write and close
|
||||
that window (:wq or |:Gwrite|) to finish the commit.
|
||||
Unlike when running the actual git-commit command, it
|
||||
is possible (but unadvisable) to alter the index with
|
||||
commands like git-add and git-reset while a commit
|
||||
message is pending.
|
||||
the window (:wq) to finish the commit. To cancel, use
|
||||
an empty message.
|
||||
|
||||
*fugitive-:Grevert*
|
||||
:Grevert [args] A wrapper around git-revert. Similar to |:Gcommit|.
|
||||
|
||||
*fugitive-:Gmerge*
|
||||
:Gmerge [args] Calls git-merge and loads errors and conflicted files
|
||||
@ -68,28 +72,25 @@ that are part of Git repositories).
|
||||
*fugitive-:Gfetch*
|
||||
:Gfetch [args] Like |:Gpush|, but for git-fetch.
|
||||
|
||||
*fugitive-:Ggrep*
|
||||
*fugitive-:Ggrep* *fugitive-:Gcgrep*
|
||||
:Ggrep[!] [args] |:grep|[!] with git-grep as 'grepprg'.
|
||||
|
||||
*fugitive-:Glgrep*
|
||||
:Glgrep[!] [args] |:lgrep|[!] with git-grep as 'grepprg'.
|
||||
|
||||
*fugitive-:Glog*
|
||||
:Glog [args] Load the commit history into the |quickfix| list.
|
||||
Additional git-log arguments can be given (for
|
||||
example, --reverse). Provide "--" in the argument
|
||||
list to target all commits. Otherwise, only commits
|
||||
changing the current file will be targeted. This
|
||||
special casing is slated to be removed.
|
||||
*fugitive-:Gclog* *fugitive-:Glog*
|
||||
:Gclog[!] [args] Use git-log [args] to load the commit history into the
|
||||
:Glog[!] [args] |quickfix| list. Jump to the first commit unless [!]
|
||||
is given.
|
||||
|
||||
:{range}Glog [args] Use git-log -L to load previous revisions of the given
|
||||
:{range}Gclog[!] [args] Use git-log -L to load previous revisions of the given
|
||||
range of the current file into the |quickfix| list.
|
||||
The cursor is positioned on the first line of the
|
||||
first diff hunk for each commit. Use :0Glog to target
|
||||
the entire file.
|
||||
first diff hunk for each commit. Use :0Gclog to
|
||||
target the entire file.
|
||||
|
||||
*fugitive-:Gllog*
|
||||
:Gllog [args] Like |:Glog|, but use the location list instead of the
|
||||
:Gllog [args] Like |:Gclog|, but use the location list instead of the
|
||||
|quickfix| list.
|
||||
|
||||
*fugitive-:Gedit* *fugitive-:Ge*
|
||||
@ -109,8 +110,10 @@ that are part of Git repositories).
|
||||
|
||||
:Gsplit! [args] *fugitive-:Gsplit!* *fugitive-:Gvsplit!*
|
||||
:Gvsplit! [args] *fugitive-:Gtabedit!* *fugitive-:Gpedit!*
|
||||
:Gtabedit! [args] Like |:Git!|, but open the resulting temp file in a
|
||||
:Gpedit! [args] split, tab, or preview window.
|
||||
:Gtabedit! [args] Capture the output of `git [args]` to a temp file and
|
||||
:Gpedit! [args] open it in a split, tab, or preview window. Use
|
||||
:0Gsplit! to suppress the split and open it in the
|
||||
current window.
|
||||
|
||||
*fugitive-:Gread*
|
||||
:Gread [object] Empty the buffer and |:read| a |fugitive-object|.
|
||||
@ -136,7 +139,7 @@ that are part of Git repositories).
|
||||
|
||||
:Gwrite {path} You can give |:Gwrite| an explicit path of where in
|
||||
the work tree to write. You can also give a path like
|
||||
:0:foo.txt or even :0 to write to just that stage in
|
||||
:0:foo.txt or :0:% to write to just that stage in
|
||||
the index.
|
||||
|
||||
*fugitive-:Gwq*
|
||||
@ -146,25 +149,31 @@ that are part of Git repositories).
|
||||
:Gwq! [path] Like |:Gwrite|! followed by |:quit|! if the write
|
||||
succeeded.
|
||||
|
||||
*fugitive-:Gdiff*
|
||||
:Gdiff [object] Perform a |vimdiff| against the given file, or if a
|
||||
*fugitive-:Gdiffsplit*
|
||||
:Gdiffsplit [object] Perform a |vimdiff| against the given file, or if a
|
||||
commit is given, the current file in that commit.
|
||||
With no argument, the version in the index is used
|
||||
(which means a three-way diff during a merge conflict,
|
||||
making it a git-mergetool alternative). The newer of
|
||||
the two files is placed to the right or bottom,
|
||||
depending on 'diffopt', and the width of the window
|
||||
relative to 'textwidth'. Use |do| and |dp| and write
|
||||
to the index file to simulate "git add --patch". For
|
||||
the three-way diff, there is also d2o and d3o pulling
|
||||
the hunk to the middle from the left or the right
|
||||
window, respectively.
|
||||
With no argument, the version in the index or work
|
||||
tree is used. The newer of the two files is placed to
|
||||
the right or bottom, depending on 'diffopt' and the
|
||||
width of the window relative to 'textwidth'. Use
|
||||
Vim's |do| and |dp| to stage and unstage changes.
|
||||
|
||||
*fugitive-:Gsdiff*
|
||||
:Gsdiff [object] Like |:Gdiff|, but always split horizontally.
|
||||
*fugitive-:Gdiffsplit!*
|
||||
:Gdiffsplit! Diff against any and all direct ancestors, retaining
|
||||
focus on the current window. During a merge conflict,
|
||||
this is a three-way diff against the "ours" and
|
||||
"theirs" ancestors. Additional d2o and d3o maps are
|
||||
provided to to obtain the hunk from the "ours" or
|
||||
"theirs" ancestor, respectively.
|
||||
|
||||
*fugitive-:Gvdiff*
|
||||
:Gvdiff [object] Like |:Gdiff|, but always split vertically.
|
||||
:Gdiffsplit! {object} Like |:Gdiffsplit|, but retain focus on the current
|
||||
window.
|
||||
|
||||
*fugitive-:Gvdiffsplit*
|
||||
:Gvdiffsplit [object] Like |:Gdiffsplit|, but always split vertically.
|
||||
|
||||
*fugitive-:Ghdiffsplit* *fugitive-:Gsdiff*
|
||||
:Ghdiffsplit [object] Like |:Gdiffsplit|, but always split horizontally.
|
||||
|
||||
*fugitive-:Gmove*
|
||||
:Gmove {destination} Wrapper around git-mv that renames the buffer
|
||||
@ -184,26 +193,31 @@ that are part of Git repositories).
|
||||
:Gremove Like :Gdelete, but keep the (now empty) buffer around.
|
||||
|
||||
*fugitive-:Gblame*
|
||||
:Gblame [flags] Run git-blame on the file and open the results in a
|
||||
scroll bound vertical split. You can give any of
|
||||
ltfnsewMC as flags and they will be passed along to
|
||||
git-blame. The following maps, which work on the
|
||||
cursor line commit where sensible, are provided:
|
||||
:Gblame [flags] Run git-blame [flags] on the current file and open the
|
||||
results in a scroll-bound vertical split. The
|
||||
following maps, which work on the cursor line commit
|
||||
where sensible, are provided:
|
||||
|
||||
g? show this help
|
||||
A resize to end of author column
|
||||
C resize to end of commit column
|
||||
D resize to end of date/time column
|
||||
q close blame and return to blamed window
|
||||
gq q, then |:Gedit| to return to work tree version
|
||||
<CR> q, then open commit
|
||||
o open commit in horizontal split
|
||||
O open commit in new tab
|
||||
p open commit in preview window
|
||||
gq close blame, then |:Gedit| to return to work
|
||||
tree version
|
||||
<CR> close blame, and jump to patch that added line
|
||||
(or directly to blob for boundary commit)
|
||||
o jump to patch or blob in horizontal split
|
||||
O jump to patch or blob in new tab
|
||||
p jump to patch or blob in preview window
|
||||
- reblame at commit
|
||||
~ reblame at [count]th first grandparent
|
||||
P reblame at [count]th parent (like HEAD^[count])
|
||||
|
||||
:[range]Gblame [flags] If a range is given, just that part of the file will
|
||||
:Gblame [flags] {file} be blamed, and a horizontal split without
|
||||
scrollbinding is used. You can also give an arbitrary
|
||||
filename.
|
||||
|
||||
*fugitive-:Gbrowse*
|
||||
:Gbrowse Open the current file, blob, tree, commit, or tag
|
||||
in your browser at the upstream hosting provider.
|
||||
@ -238,7 +252,7 @@ operate on the file or hunk under the cursor are generally available in visual
|
||||
mode to operate on multiple files or partial hunks.
|
||||
|
||||
*fugitive-staging-mappings*
|
||||
Staging and resetting mappings ~
|
||||
Staging/unstaging mappings ~
|
||||
|
||||
*fugitive_s*
|
||||
s Stage (add) the file or hunk under the cursor.
|
||||
@ -249,11 +263,8 @@ u Unstage (reset) the file or hunk under the cursor.
|
||||
*fugitive_-*
|
||||
- Stage or unstage the file or hunk under the cursor.
|
||||
|
||||
*fugitive_CTRL-N*
|
||||
<C-N> Skip to the next file or hunk.
|
||||
|
||||
*fugitive_CTRL-P*
|
||||
<C-P> Skip to the previous file or hunk.
|
||||
*fugitive_U*
|
||||
U Unstage everything.
|
||||
|
||||
*fugitive_X*
|
||||
X Discard the change under the cursor. This uses
|
||||
@ -267,39 +278,53 @@ X Discard the change under the cursor. This uses
|
||||
*fugitive_=*
|
||||
= Toggle an inline diff of the file under the cursor.
|
||||
|
||||
*fugitive_<*
|
||||
< Insert an inline diff of the file under the cursor.
|
||||
|
||||
*fugitive_>*
|
||||
> Remove the inline diff of the file under the cursor.
|
||||
> Insert an inline diff of the file under the cursor.
|
||||
|
||||
*fugitive_i*
|
||||
i On untracked files, call |:Git| add --intent-to-add.
|
||||
Otherwise, move to next hunk, expanding inline diffs
|
||||
automatically.
|
||||
*fugitive_<*
|
||||
< Remove the inline diff of the file under the cursor.
|
||||
|
||||
*fugitive_dd*
|
||||
dd Perform a |:Gdiff| on the file under the cursor.
|
||||
*fugitive_gI*
|
||||
gI Open .git/info/exclude in a split and add the file
|
||||
under the cursor. Use a count to open .gitignore.
|
||||
|
||||
*fugitive_ds*
|
||||
ds Perform a |:Gsdiff| on the file under the cursor.
|
||||
|
||||
*fugitive_dv*
|
||||
dv Perform a |:Gvdiff| on the file under the cursor.
|
||||
*fugitive_I*
|
||||
I Invoke |:Git| add --patch or reset --patch on the file
|
||||
P under the cursor. On untracked files, this instead
|
||||
calls |:Git| add --intent-to-add.
|
||||
|
||||
*fugitive_d*
|
||||
Diff mappings ~
|
||||
*fugitive_dp*
|
||||
dp Invoke |:Git!| diff on the file under the cursor.
|
||||
Deprecated in favor of inline diffs. On untracked
|
||||
files, this instead calls |:Git| add --intent-to-add.
|
||||
Deprecated in favor of inline diffs.
|
||||
|
||||
P Invoke |:Git| add --patch or reset --patch on the file
|
||||
under the cursor.
|
||||
*fugitive_dd*
|
||||
dd Perform a |:Gdiffsplit| on the file under the cursor.
|
||||
|
||||
*fugitive_dv*
|
||||
dv Perform a |:Gvdiffsplit| on the file under the cursor.
|
||||
|
||||
*fugitive_ds* *fugitive_dh*
|
||||
ds Perform a |:Ghdiffsplit| on the file under the cursor.
|
||||
dh
|
||||
*fugitive_dq*
|
||||
dq Close all but one diff buffer, and |:diffoff|! the
|
||||
last one.
|
||||
|
||||
*fugitive_d?*
|
||||
d? Show this help.
|
||||
|
||||
*fugitive-navigation-mappings*
|
||||
Navigation mappings ~
|
||||
|
||||
*fugitive_<CR>*
|
||||
<CR> Open the file or |fugitive-object| under the cursor.
|
||||
in a blob, this and similar maps jump to the patch
|
||||
from the diff where this was added, or where it was
|
||||
removed if a count was given. If the line is still in
|
||||
the work tree version, passing a count takes you to
|
||||
it.
|
||||
|
||||
*fugitive_o*
|
||||
o Open the file or |fugitive-object| under the cursor in
|
||||
@ -313,6 +338,11 @@ gO Open the file or |fugitive-object| under the cursor in
|
||||
O Open the file or |fugitive-object| under the cursor in
|
||||
a new tab.
|
||||
|
||||
*fugitive_p*
|
||||
p Open the file or |fugitive-object| under the cursor in
|
||||
a preview window. In the status buffer, 1p is
|
||||
required to bypass the legacy usage instructions.
|
||||
|
||||
*fugitive_~*
|
||||
~ Open the current file in the [count]th first ancestor.
|
||||
|
||||
@ -322,9 +352,78 @@ P Open the current file in the [count]th parent.
|
||||
*fugitive_C*
|
||||
C Open the commit containing the current file.
|
||||
|
||||
*fugitive_CTRL-W_C*
|
||||
<C-W>C Open the commit containing the current file in a new
|
||||
split.
|
||||
*fugitive_CTRL-P* *fugitive_(*
|
||||
( Jump to the previous file, hunk, or revision.
|
||||
|
||||
*fugitive_CTRL-N* *fugitive_)*
|
||||
) Jump to the next file, hunk, or revision.
|
||||
|
||||
*fugitive_[c*
|
||||
[c Jump to previous hunk, expanding inline diffs
|
||||
automatically. (This shadows the Vim built-in |[c|
|
||||
that provides a similar operation in |diff| mode.)
|
||||
|
||||
*fugitive_]c*
|
||||
]c Jump to next hunk, expanding inline diffs
|
||||
automatically. (This shadows the Vim built-in |]c|
|
||||
that provides a similar operation in |diff| mode.)
|
||||
|
||||
*fugitive_[/* *fugitive_[m*
|
||||
[/ Jump to previous file, collapsing inline diffs
|
||||
[m automatically. (Mnemonic: "/" appears in filenames,
|
||||
"m" appears in "filenames".)
|
||||
|
||||
*fugitive_]/* *fugitive_]m*
|
||||
]/ Jump to next file, collapsing inline diffs
|
||||
]m automatically. (Mnemonic: "/" appears in filenames,
|
||||
"m" appears in "filenames".)
|
||||
|
||||
*fugitive_i*
|
||||
i Jump to the next file or hunk, expanding inline diffs
|
||||
automatically.
|
||||
|
||||
*fugitive_[[*
|
||||
[[ Jump [count] sections backward.
|
||||
|
||||
*fugitive_]]*
|
||||
]] Jump [count] sections forward.
|
||||
|
||||
*fugitive_[]*
|
||||
[] Jump [count] section ends backward.
|
||||
|
||||
*fugitive_][*
|
||||
][ Jump [count] section ends forward.
|
||||
|
||||
*fugitive_star*
|
||||
* One the first column of a + or - diff line, search for
|
||||
the corresponding - or + line. Otherwise, defer to
|
||||
built-in |star|.
|
||||
|
||||
*fugitive_#*
|
||||
# Same as "*", but search backward.
|
||||
|
||||
*fugitive_gu*
|
||||
gu Jump to file [count] in the "Untracked" or "Unstaged"
|
||||
section.
|
||||
|
||||
*fugitive_gU*
|
||||
gU Jump to file [count] in the "Unstaged" section.
|
||||
|
||||
*fugitive_gs*
|
||||
gs Jump to file [count] in the "Staged" section.
|
||||
|
||||
*fugitive_gp*
|
||||
gp Jump to file [count] in the "Unpushed" section.
|
||||
|
||||
*fugitive_gP*
|
||||
gP Jump to file [count] in the "Unpulled" section.
|
||||
|
||||
*fugitive_gr*
|
||||
gr Jump to file [count] in the "Rebasing" section.
|
||||
|
||||
*fugitive_gi*
|
||||
gi Open .git/info/exclude in a split. Use a count to
|
||||
open .gitignore.
|
||||
|
||||
*fugitive_c*
|
||||
Commit mappings ~
|
||||
@ -344,17 +443,74 @@ cva Amend the last commit with -v
|
||||
cf Create a `fixup!` commit for the commit under the
|
||||
cursor.
|
||||
|
||||
cF Create a `fixup!` commit for the commit under the
|
||||
cursor and immediately rebase it.
|
||||
|
||||
cs Create a `squash!` commit for the commit under the
|
||||
cursor.
|
||||
|
||||
cS Create a `squash!` commit for the commit under the
|
||||
cursor and immediately rebase it.
|
||||
|
||||
cA Create a `squash!` commit for the commit under the
|
||||
cursor and edit the message.
|
||||
|
||||
c<Space> Populate command line with ":Gcommit ".
|
||||
|
||||
*fugitive_cr*
|
||||
crc Revert the commit under the cursor.
|
||||
|
||||
crn Revert the commit under the cursor in the index and
|
||||
work tree, but do not actually commit the changes.
|
||||
|
||||
cr<Space> Populate command line with ":Grevert ".
|
||||
|
||||
*fugitive_cm*
|
||||
cm<Space> Populate command line with ":Gmerge ".
|
||||
|
||||
c? Show this help.
|
||||
|
||||
*fugitive_cb*
|
||||
*fugitive_co*
|
||||
Checkout/branch mappings ~
|
||||
|
||||
coo Check out the commit under the cursor.
|
||||
|
||||
cb<Space> Populate command line with ":G branch ".
|
||||
|
||||
co<Space> Populate command line with ":G checkout ".
|
||||
|
||||
cb? Show this help.
|
||||
co?
|
||||
|
||||
*fugitive_cz*
|
||||
Stash mappings ~
|
||||
|
||||
czz Push stash. Pass a [count] of 1 to add
|
||||
`--include-untracked` or 2 to add `--all`.
|
||||
|
||||
czw Push stash of worktree. Like `czz` with
|
||||
`--include-index`.
|
||||
|
||||
czA Apply topmost stash, or stash@{count}.
|
||||
|
||||
cza Apply topmost stash, or stash@{count}, preserving the
|
||||
index.
|
||||
|
||||
czP Pop topmost stash, or stash@{count}.
|
||||
|
||||
czp Pop topmost stash, or stash@{count}, preserving the
|
||||
index.
|
||||
|
||||
cz<Space> Populate command line with ":G stash ".
|
||||
|
||||
cz? Show this help.
|
||||
|
||||
*fugitive_r*
|
||||
Rebase mappings ~
|
||||
|
||||
ri Perform an interactive rebase. Uses ancestor of
|
||||
commit under cursor as upstream if available.
|
||||
u commit under cursor as upstream if available.
|
||||
|
||||
rf Perform an autosquash rebase without editing the todo
|
||||
list. Uses ancestor of commit under cursor as
|
||||
@ -382,21 +538,22 @@ rm Perform an interactive rebase with the commit under
|
||||
rd Perform an interactive rebase with the commit under
|
||||
the cursor set to `drop`.
|
||||
|
||||
r<Space> Populate command line with ":Grebase ".
|
||||
|
||||
r? Show this help.
|
||||
|
||||
*fugitive-misc-mappings*
|
||||
Miscellaneous mappings ~
|
||||
|
||||
*fugitive_gq* *fugitive_q*
|
||||
gq Close the status buffer.
|
||||
|
||||
*fugitive_R*
|
||||
R Reload the status buffer.
|
||||
|
||||
*fugitive_.*
|
||||
. Start a |:| command line with the file under the
|
||||
cursor prepopulated.
|
||||
|
||||
*fugitive_g?*
|
||||
g? Open this help.
|
||||
g? Show help for |fugitive-mappings|.
|
||||
|
||||
*fugitive-global-mappings*
|
||||
Global mappings ~
|
||||
@ -418,12 +575,13 @@ optional object, the default is the file in the index for work tree files and
|
||||
the work tree file for everything else. Example objects follow.
|
||||
|
||||
Object Meaning ~
|
||||
HEAD .git/HEAD
|
||||
refs/heads/x .git/refs/heads/x (in "common dir" if present)
|
||||
@ The commit referenced by @ aka HEAD
|
||||
master The commit referenced by master
|
||||
master^ The parent of the commit referenced by master
|
||||
master...other The merge base of master and other
|
||||
master: The tree referenced by master
|
||||
./master The file named master in the working directory
|
||||
:(top)master The file named master in the the work tree
|
||||
Makefile The file named Makefile in the work tree
|
||||
@^:Makefile The file named Makefile in the parent of HEAD
|
||||
:Makefile The file named Makefile in the index (writable)
|
||||
@ -457,6 +615,6 @@ ABOUT *fugitive-about*
|
||||
|
||||
Grab the latest version or report a bug on GitHub:
|
||||
|
||||
http://github.com/tpope/vim-fugitive
|
||||
https://github.com/tpope/vim-fugitive
|
||||
|
||||
vim:tw=78:et:ft=help:norl:
|
||||
|
@ -1,6 +1,6 @@
|
||||
" fugitive.vim - A Git wrapper so awesome, it should be illegal
|
||||
" Maintainer: Tim Pope <http://tpo.pe/>
|
||||
" Version: 2.5
|
||||
" Version: 3.0
|
||||
" GetLatestVimScripts: 2975 1 :AutoInstall: fugitive.vim
|
||||
|
||||
if exists('g:loaded_fugitive')
|
||||
@ -20,18 +20,14 @@ function! FugitiveGitDir(...) abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! FugitiveCommonDir(...) abort
|
||||
let dir = FugitiveGitDir(a:0 ? a:1 : -1)
|
||||
if empty(dir)
|
||||
return ''
|
||||
endif
|
||||
return fugitive#CommonDir(dir)
|
||||
endfunction
|
||||
|
||||
function! FugitiveWorkTree(...) abort
|
||||
return s:Tree(FugitiveGitDir(a:0 ? a:1 : -1))
|
||||
endfunction
|
||||
|
||||
" FugitiveReal() takes a fugitive:// URL and returns the corresponding path in
|
||||
" the work tree. This may be useful to get a cleaner path for inclusion in
|
||||
" the statusline, for example. Note that the file and its parent directories
|
||||
" are not guaranteed to exist.
|
||||
"
|
||||
" This is intended as an abstract API to be used on any "virtual" path. For a
|
||||
" buffer named foo://bar, check for a function named FooReal(), and if it
|
||||
" exists, call FooReal("foo://bar").
|
||||
function! FugitiveReal(...) abort
|
||||
let file = a:0 ? a:1 : @%
|
||||
if file =~# '^\a\a\+:' || a:0 > 1
|
||||
@ -43,6 +39,13 @@ function! FugitiveReal(...) abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" FugitiveFind() takes a Fugitive object and returns the appropriate Vim
|
||||
" buffer name. You can use this to generate Fugitive URLs ("HEAD:README") or
|
||||
" to get the absolute path to a file in the Git dir (".git/HEAD"), the common
|
||||
" dir (".git/config"), or the work tree (":(top)Makefile").
|
||||
"
|
||||
" An optional second argument provides the Git dir, or the buffer number of a
|
||||
" buffer with a Git dir. The default is the current buffer.
|
||||
function! FugitiveFind(...) abort
|
||||
return fugitive#Find(a:0 ? a:1 : bufnr(''), FugitiveGitDir(a:0 > 1 ? a:2 : -1))
|
||||
endfunction
|
||||
@ -55,12 +58,15 @@ function! FugitivePath(...) abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" FugitiveParse() takes a fugitive:// URL and returns a 2 element list
|
||||
" containing the Git dir and an object name ("commit:file"). It's effectively
|
||||
" then inverse of FugitiveFind().
|
||||
function! FugitiveParse(...) abort
|
||||
let path = s:Slash(a:0 ? a:1 : @%)
|
||||
if path !~# '^fugitive:'
|
||||
return ['', '']
|
||||
endif
|
||||
let vals = matchlist(path, '\c^fugitive:\%(//\)\=\(.\{-\}\)\%(//\|::\)\(\x\{40\}\|[0-3]\)\(/.*\)\=$')
|
||||
let vals = matchlist(path, '\c^fugitive:\%(//\)\=\(.\{-\}\)\%(//\|::\)\(\x\{40,\}\|[0-3]\)\(/.*\)\=$')
|
||||
if len(vals)
|
||||
return [(vals[2] =~# '^.$' ? ':' : '') . vals[2] . substitute(vals[3], '^/', ':', ''), vals[1]]
|
||||
endif
|
||||
@ -68,6 +74,14 @@ function! FugitiveParse(...) abort
|
||||
throw v:errmsg
|
||||
endfunction
|
||||
|
||||
" FugitivePrepare() constructs a Git command string which can be executed with
|
||||
" functions like system() and commands like :!. Integer arguments will be
|
||||
" treated as buffer numbers, and the appropriate relative path inserted in
|
||||
" their place.
|
||||
"
|
||||
" If the first argument is a string that looks like a path or an empty string,
|
||||
" it will be used as the Git dir. If it's a buffer number, the Git dir for
|
||||
" that buffer will be used. The default is the current buffer.
|
||||
function! FugitivePrepare(...) abort
|
||||
return call('fugitive#Prepare', a:000)
|
||||
endfunction
|
||||
@ -101,9 +115,21 @@ function! FugitiveStatusline(...) abort
|
||||
return fugitive#Statusline()
|
||||
endfunction
|
||||
|
||||
function! FugitiveCommonDir(...) abort
|
||||
let dir = FugitiveGitDir(a:0 ? a:1 : -1)
|
||||
if empty(dir)
|
||||
return ''
|
||||
endif
|
||||
return fugitive#CommonDir(dir)
|
||||
endfunction
|
||||
|
||||
function! FugitiveWorkTree(...) abort
|
||||
return s:Tree(FugitiveGitDir(a:0 ? a:1 : -1))
|
||||
endfunction
|
||||
|
||||
function! FugitiveIsGitDir(path) abort
|
||||
let path = substitute(a:path, '[\/]$', '', '') . '/'
|
||||
return getfsize(path.'HEAD') > 10 && (
|
||||
return len(a:path) && getfsize(path.'HEAD') > 10 && (
|
||||
\ isdirectory(path.'objects') && isdirectory(path.'refs') ||
|
||||
\ getftype(path.'commondir') ==# 'file')
|
||||
endfunction
|
||||
@ -124,10 +150,10 @@ function! s:Tree(path) abort
|
||||
let config = readfile(config_file,'',10)
|
||||
call filter(config,'v:val =~# "^\\s*worktree *="')
|
||||
if len(config) == 1
|
||||
let worktree = matchstr(config[0], '= *\zs.*')
|
||||
let worktree = s:Slash(FugitiveVimPath(matchstr(config[0], '= *\zs.*')))
|
||||
endif
|
||||
elseif filereadable(dir . '/gitdir')
|
||||
let worktree = fnamemodify(readfile(dir . '/gitdir')[0], ':h')
|
||||
let worktree = s:Slash(fnamemodify(FugitiveVimPath(readfile(dir . '/gitdir')[0]), ':h'))
|
||||
if worktree ==# '.'
|
||||
unlet! worktree
|
||||
endif
|
||||
@ -159,9 +185,11 @@ function! FugitiveExtractGitDir(path) abort
|
||||
endif
|
||||
let root = resolve(path)
|
||||
if root !=# path
|
||||
silent! exe haslocaldir() ? 'lcd .' : 'cd .'
|
||||
silent! exe (haslocaldir() ? 'lcd' : exists(':tcd') && haslocaldir(-1) ? 'tcd' : 'cd') '.'
|
||||
endif
|
||||
let previous = ""
|
||||
let env_git_dir = len($GIT_DIR) ? s:Slash(simplify(fnamemodify(FugitiveVimPath($GIT_DIR), ':p:s?[\/]$??'))) : ''
|
||||
call s:Tree(env_git_dir)
|
||||
while root !=# previous
|
||||
if root =~# '\v^//%([^/]+/?)?$'
|
||||
break
|
||||
@ -169,14 +197,10 @@ function! FugitiveExtractGitDir(path) abort
|
||||
if index(split($GIT_CEILING_DIRECTORIES, ':'), root) >= 0
|
||||
break
|
||||
endif
|
||||
if root ==# $GIT_WORK_TREE && FugitiveIsGitDir($GIT_DIR)
|
||||
return simplify(fnamemodify($GIT_DIR, ':p:s?[\/]$??'))
|
||||
endif
|
||||
if FugitiveIsGitDir($GIT_DIR)
|
||||
call s:Tree(simplify(fnamemodify($GIT_DIR, ':p:s?[\/]$??')))
|
||||
if has_key(s:dir_for_worktree, root)
|
||||
return s:dir_for_worktree[root]
|
||||
endif
|
||||
if root ==# $GIT_WORK_TREE && FugitiveIsGitDir(env_git_dir)
|
||||
return env_git_dir
|
||||
elseif has_key(s:dir_for_worktree, root)
|
||||
return s:dir_for_worktree[root]
|
||||
endif
|
||||
let dir = substitute(root, '[\/]$', '', '') . '/.git'
|
||||
let type = getftype(dir)
|
||||
@ -186,10 +210,11 @@ function! FugitiveExtractGitDir(path) abort
|
||||
return resolve(dir)
|
||||
elseif type !=# '' && filereadable(dir)
|
||||
let line = get(readfile(dir, '', 1), 0, '')
|
||||
if line =~# '^gitdir: \.' && FugitiveIsGitDir(root.'/'.line[8:-1])
|
||||
return simplify(root.'/'.line[8:-1])
|
||||
elseif line =~# '^gitdir: ' && FugitiveIsGitDir(line[8:-1])
|
||||
return line[8:-1]
|
||||
let file_dir = s:Slash(FugitiveVimPath(matchstr(line, '^gitdir: \zs.*')))
|
||||
if file_dir !~# '^/\|^\a:' && FugitiveIsGitDir(root . '/' . file_dir)
|
||||
return simplify(root . '/' . file_dir)
|
||||
elseif len(file_dir) && FugitiveIsGitDir(file_dir)
|
||||
return file_dir
|
||||
endif
|
||||
elseif FugitiveIsGitDir(root)
|
||||
return root
|
||||
@ -215,6 +240,18 @@ function! FugitiveDetect(path) abort
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! FugitiveVimPath(path) abort
|
||||
if exists('+shellslash') && !&shellslash
|
||||
return tr(a:path, '/', '\')
|
||||
else
|
||||
return a:path
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! FugitiveGitPath(path) abort
|
||||
return s:Slash(a:path)
|
||||
endfunction
|
||||
|
||||
function! s:Slash(path) abort
|
||||
if exists('+shellslash')
|
||||
return tr(a:path, '\', '/')
|
||||
@ -234,7 +271,10 @@ function! s:ProjectionistDetect() abort
|
||||
if exists('+shellslash') && !&shellslash
|
||||
let base = tr(base, '/', '\')
|
||||
endif
|
||||
call projectionist#append(base, FugitiveCommonDir(dir) . '/info/projections.json')
|
||||
let file = FugitiveCommonDir(dir) . '/info/projections.json'
|
||||
if filereadable(file)
|
||||
call projectionist#append(base, file)
|
||||
endif
|
||||
endif
|
||||
endfunction
|
||||
|
||||
@ -266,7 +306,7 @@ augroup fugitive
|
||||
autocmd FileType gitrebase
|
||||
\ let &l:include = '^\%(pick\|squash\|edit\|reword\|fixup\|drop\|[pserfd]\)\>' |
|
||||
\ if len(FugitiveGitDir()) |
|
||||
\ let &l:includeexpr = 'v:fname =~# ''^\x\{4,40\}$'' ? FugitiveFind(v:fname) : ' .
|
||||
\ let &l:includeexpr = 'v:fname =~# ''^\x\{4,\}$'' ? FugitiveFind(v:fname) : ' .
|
||||
\ (len(&l:includeexpr) ? &l:includeexpr : 'v:fname') |
|
||||
\ endif |
|
||||
\ let b:undo_ftplugin = get(b:, 'undo_ftplugin', 'exe') . '|setl inex= inc='
|
||||
@ -296,3 +336,20 @@ augroup fugitive
|
||||
|
||||
autocmd User ProjectionistDetect call s:ProjectionistDetect()
|
||||
augroup END
|
||||
|
||||
let g:io_fugitive = {
|
||||
\ 'simplify': function('fugitive#simplify'),
|
||||
\ 'resolve': function('fugitive#resolve'),
|
||||
\ 'getftime': function('fugitive#getftime'),
|
||||
\ 'getfsize': function('fugitive#getfsize'),
|
||||
\ 'getftype': function('fugitive#getftype'),
|
||||
\ 'filereadable': function('fugitive#filereadable'),
|
||||
\ 'filewritable': function('fugitive#filewritable'),
|
||||
\ 'isdirectory': function('fugitive#isdirectory'),
|
||||
\ 'getfperm': function('fugitive#getfperm'),
|
||||
\ 'setfperm': function('fugitive#setfperm'),
|
||||
\ 'readfile': function('fugitive#readfile'),
|
||||
\ 'writefile': function('fugitive#writefile'),
|
||||
\ 'glob': function('fugitive#glob'),
|
||||
\ 'delete': function('fugitive#delete'),
|
||||
\ 'Real': function('FugitiveReal')}
|
||||
|
@ -9,24 +9,39 @@ syn include @fugitiveDiff syntax/diff.vim
|
||||
|
||||
syn match fugitiveHeader /^[A-Z][a-z][^:]*:/ nextgroup=fugitiveHash,fugitiveSymbolicRef skipwhite
|
||||
|
||||
syn region fugitiveSection start=/^\%(.*(\d\+)$\)\@=/ contains=fugitiveHeading end=/^$\@=/
|
||||
syn region fugitiveSection start=/^\%(.*(\d\+)$\)\@=/ contains=fugitiveHeading end=/^$/
|
||||
syn cluster fugitiveSection contains=fugitiveSection
|
||||
syn match fugitiveHeading /^[A-Z][a-z][^:]*\ze (\d\+)$/ contains=fugitivePreposition contained nextgroup=fugitiveCount skipwhite
|
||||
syn match fugitiveCount /(\d\+)/hs=s+1,he=e-1 contained
|
||||
syn match fugitivePreposition /\<\%([io]nto\|from\|to\|Rebasing\%( detached\)\=\)\>/ transparent contained nextgroup=fugitiveHash,fugitiveSymbolicRef skipwhite
|
||||
|
||||
syn match fugitiveInstruction /^\l\l\+\>/ contained containedin=fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveDone /^done\>/ contained containedin=fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveStop /^stop\>/ contained containedin=fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveModifier /^[MADRCU?]\{1,2} / contained containedin=fugitiveSection
|
||||
syn match FugitiveSymbolicRef /\.\@!\%(\.\.\@!\|[^[:space:][:cntrl:]\:.]\)\+\.\@<!/ contained
|
||||
syn match fugitiveHash /^\x\{4,\}\>/ contained containedin=fugitiveSection
|
||||
syn match fugitiveInstruction /^\l\l\+\>/ contained containedin=@fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveDone /^done\>/ contained containedin=@fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveStop /^stop\>/ contained containedin=@fugitiveSection nextgroup=fugitiveHash skipwhite
|
||||
syn match fugitiveModifier /^[MADRCU?]\{1,2} / contained containedin=@fugitiveSection
|
||||
syn match fugitiveSymbolicRef /\.\@!\%(\.\.\@!\|[^[:space:][:cntrl:]\:.]\)\+\.\@<!/ contained
|
||||
syn match fugitiveHash /^\x\{4,\}\>/ contained containedin=@fugitiveSection
|
||||
syn match fugitiveHash /\<\x\{4,\}\>/ contained
|
||||
|
||||
syn region fugitiveHunk start=/^\%(@@ -\)\@=/ end=/^\%([A-Za-z?@]\|$\)\@=/ contains=@fugitiveDiff containedin=fugitiveSection fold
|
||||
syn region fugitiveHunk start=/^\%(@@\+ -\)\@=/ end=/^\%([A-Za-z?@]\|$\)\@=/ contains=@fugitiveDiff containedin=@fugitiveSection fold
|
||||
|
||||
for s:section in ['Untracked', 'Unstaged', 'Staged']
|
||||
exe 'syn region fugitive' . s:section . 'Section start=/^\%(' . s:section . ' .*(\d\+)$\)\@=/ contains=fugitive' . s:section . 'Heading end=/^$/'
|
||||
exe 'syn match fugitive' . s:section . 'Modifier /^[MADRCU?] / contained containedin=fugitive' . s:section . 'Section'
|
||||
exe 'syn cluster fugitiveSection add=fugitive' . s:section . 'Section'
|
||||
exe 'syn match fugitive' . s:section . 'Heading /^[A-Z][a-z][^:]*\ze (\d\+)$/ contains=fugitivePreposition contained nextgroup=fugitiveCount skipwhite'
|
||||
endfor
|
||||
unlet s:section
|
||||
|
||||
hi def link fugitiveHeader Label
|
||||
hi def link fugitiveHeading PreProc
|
||||
hi def link fugitiveUntrackedHeading PreCondit
|
||||
hi def link fugitiveUnstagedHeading Macro
|
||||
hi def link fugitiveStagedHeading Include
|
||||
hi def link fugitiveModifier Type
|
||||
hi def link fugitiveUntrackedModifier StorageClass
|
||||
hi def link fugitiveUnstagedModifier Structure
|
||||
hi def link fugitiveStagedModifier Typedef
|
||||
hi def link fugitiveInstruction Type
|
||||
hi def link fugitiveStop Function
|
||||
hi def link fugitiveHash Identifier
|
||||
|
7
sources_non_forked/vim-fugitive/syntax/fugitiveblame.vim
Normal file
7
sources_non_forked/vim-fugitive/syntax/fugitiveblame.vim
Normal file
@ -0,0 +1,7 @@
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
call fugitive#BlameSyntax()
|
||||
|
||||
let b:current_syntax = "fugitiveblame"
|
Reference in New Issue
Block a user