mirror of https://github.com/amix/vimrc.git
parent
85888ddbd3
commit
bb9c85e523
@ -1 +0,0 @@ |
||||
Subproject commit 168883af7aec05f139af251f47eadd5dfb802c9d |
@ -1 +0,0 @@ |
||||
Subproject commit 2051d4e5384b94b4e258b059e959ffb5202dec11 |
@ -1 +0,0 @@ |
||||
Subproject commit 528a59f26d12278698bb946f8fb82a63711eec21 |
@ -1 +0,0 @@ |
||||
Subproject commit a1071f30656b26645b69f59e1e05257829a39620 |
@ -1 +0,0 @@ |
||||
Subproject commit fb8387fd066e9757e53727131a6d197cecf4bb55 |
@ -1 +0,0 @@ |
||||
Subproject commit d6dcb9b0fb5beac9e84cfb84c1917b7e0df5850f |
@ -1 +0,0 @@ |
||||
Subproject commit d605010cab695dca64c5cd9bf8bbcc8db9864815 |
@ -1 +0,0 @@ |
||||
Subproject commit dcdab0cd55da5e0b8655c000d99d96624cd6404c |
@ -0,0 +1 @@ |
||||
tags |
@ -0,0 +1,96 @@ |
||||
# ack.vim # |
||||
|
||||
This plugin is a front for the Perl module |
||||
[App::Ack](http://search.cpan.org/~petdance/ack/ack). Ack can be used as a |
||||
replacement for 99% of the uses of _grep_. This plugin will allow you to run |
||||
ack from vim, and shows the results in a split window. |
||||
|
||||
The *Official Version* of this plugin is available at [vim.org](http://www.vim.org/scripts/script.php?script_id=2572). |
||||
|
||||
## Installation ## |
||||
|
||||
|
||||
### Ack |
||||
|
||||
You have to install [ack](http://betterthangrep.com/), of course. |
||||
|
||||
Install on Debian / Ubuntu with: |
||||
|
||||
sudo apt-get install ack-grep |
||||
|
||||
For Debian / Ubuntu you can add this line into your .vimrc: |
||||
|
||||
let g:ackprg="ack-grep -H --nocolor --nogroup --column" |
||||
|
||||
Install on Gentoo with: |
||||
|
||||
sudo emerge ack |
||||
|
||||
Install with Homebrew: |
||||
|
||||
brew install ack |
||||
|
||||
Install with MacPorts: |
||||
|
||||
sudo port install p5-app-ack |
||||
|
||||
Install with Gentoo Prefix |
||||
|
||||
emerge ack |
||||
|
||||
Otherwise, you are on your own. |
||||
|
||||
### The Plugin |
||||
|
||||
If you have [Rake](http://rake.rubyforge.org/) installed, you can just run: `rake install`. |
||||
|
||||
Otherwise, the file ack.vim goes in ~/.vim/plugin, and the ack.txt file belongs in ~/.vim/doc. Be sure to run |
||||
|
||||
:helptags ~/.vim/doc |
||||
|
||||
afterwards. |
||||
|
||||
|
||||
## Usage ## |
||||
|
||||
:Ack [options] {pattern} [{directory}] |
||||
|
||||
Search recursively in {directory} (which defaults to the current directory) for the {pattern}. |
||||
|
||||
Files containing the search term will be listed in the split window, along with |
||||
the line number of the occurrence, once for each occurrence. [Enter] on a line |
||||
in this window will open the file, and place the cursor on the matching line. |
||||
|
||||
Just like where you use :grep, :grepadd, :lgrep, and :lgrepadd, you can use `:Ack`, `:AckAdd`, `:LAck`, and `:LAckAdd` respectively. (See `doc/ack.txt`, or install and `:h Ack` for more information.) |
||||
|
||||
**From the [ack docs](http://betterthangrep.com/)** (my favorite feature): |
||||
|
||||
--type=TYPE, --type=noTYPE |
||||
|
||||
Specify the types of files to include or exclude from a search. TYPE is a filetype, like perl or xml. --type=perl can also be specified as --perl, and --type=noperl can be done as --noperl. |
||||
|
||||
If a file is of both type "foo" and "bar", specifying --foo and --nobar will exclude the file, because an exclusion takes precedence over an inclusion. |
||||
|
||||
Type specifications can be repeated and are ORed together. |
||||
|
||||
See ack --help=types for a list of valid types. |
||||
|
||||
### Keyboard Shortcuts ### |
||||
|
||||
In the quickfix window, you can use: |
||||
|
||||
o to open (same as enter) |
||||
go to preview file (open but maintain focus on ack.vim results) |
||||
t to open in new tab |
||||
T to open in new tab silently |
||||
v to open in vertical split |
||||
gv to open in vertical split silently |
||||
q to close the quickfix window |
||||
|
||||
This Vim plugin is derived (and by derived, I mean copied, essentially) from |
||||
Antoine Imbert's blog post [Ack and Vim |
||||
Integration](http://blog.ant0ine.com/typepad/2007/03/ack-and-vim-integration.html) (in |
||||
particular, the function at the bottom of the post). I added a help file that |
||||
provides just enough reference to get you going. I also highly recommend you |
||||
check out the docs for the Perl script 'ack', for obvious reasons: [ack - |
||||
grep-like text finder](http://betterthangrep.com/). |
@ -0,0 +1,23 @@ |
||||
# Added by Josh Nichols, a.k.a. technicalpickles |
||||
require 'rake' |
||||
|
||||
files = ['doc/ack.txt', 'plugin/ack.vim'] |
||||
|
||||
desc 'Install plugin and documentation' |
||||
task :install do |
||||
vimfiles = if ENV['VIMFILES'] |
||||
ENV['VIMFILES'] |
||||
elsif RUBY_PLATFORM =~ /(win|w)32$/ |
||||
File.expand_path("~/vimfiles") |
||||
else |
||||
File.expand_path("~/.vim") |
||||
end |
||||
files.each do |file| |
||||
target_file = File.join(vimfiles, file) |
||||
FileUtils.mkdir_p File.dirname(target_file) |
||||
FileUtils.cp file, target_file |
||||
|
||||
puts " Copied #{file} to #{target_file}" |
||||
end |
||||
|
||||
end |
@ -0,0 +1,70 @@ |
||||
*ack.txt* Plugin that integrates ack with Vim |
||||
|
||||
============================================================================== |
||||
Author: Antoine Imbert <antoine.imbert+ackvim@gmail.com> *ack-author* |
||||
License: Same terms as Vim itself (see |license|) |
||||
|
||||
============================================================================== |
||||
INTRODUCTION *ack* |
||||
|
||||
This plugin is a front for the Perl module App::Ack. Ack can be used as a |
||||
replacement for grep. This plugin will allow you to run ack from vim, and |
||||
shows the results in a split window. |
||||
|
||||
:Ack[!] [options] {pattern} [{directory}] *:Ack* |
||||
|
||||
Search recursively in {directory} (which defaults to the current |
||||
directory) for the {pattern}. Behaves just like the |:grep| command, but |
||||
will open the |Quickfix| window for you. If [!] is not given the first |
||||
error is jumped to. |
||||
|
||||
:AckAdd [options] {pattern} [{directory}] *:AckAdd* |
||||
|
||||
Just like |:Ack|, but instead of making a new list, the matches are |
||||
appended to the current |quickfix| list. |
||||
|
||||
:AckFromSearch [{directory}] *:AckFromSearch* |
||||
|
||||
Just like |:Ack| but the pattern is from previous search. |
||||
|
||||
:LAck [options] {pattern} [{directory}] *:LAck* |
||||
|
||||
Just like |:Ack| but instead of the |quickfix| list, matches are placed in |
||||
the current |location-list|. |
||||
|
||||
:LAckAdd [options] {pattern} [{directory}] *:LAckAdd* |
||||
|
||||
Just like |:AckAdd| but instead of the |quickfix| list, matches are added |
||||
to the current |location-list| |
||||
|
||||
:AckFile [options] {pattern} [{directory}] *:AckFile* |
||||
|
||||
Search recursively in {directory} (which defaults to the current |
||||
directory) for filenames matching the {pattern}. Behaves just like the |
||||
|:grep| command, but will open the |Quickfix| window for you. |
||||
|
||||
Files containing the search term will be listed in the split window, along |
||||
with the line number of the occurrence, once for each occurrence. <Enter> on |
||||
a line in this window will open the file, and place the cursor on the matching |
||||
line. |
||||
|
||||
See http://betterthangrep.com/ for more information. |
||||
|
||||
============================================================================== |
||||
MAPPINGS *ack-mappings* |
||||
|
||||
The following keyboard shortcuts are available in the quickfix window: |
||||
|
||||
o open file (same as enter). |
||||
|
||||
go preview file (open but maintain focus on ack.vim results). |
||||
|
||||
t open in a new tab. |
||||
|
||||
T open in new tab silently. |
||||
|
||||
v open in vertical split. |
||||
|
||||
gv open in vertical split silently. |
||||
|
||||
q close the quickfix window. |
@ -0,0 +1,80 @@ |
||||
" NOTE: You must, of course, install the ack script |
||||
" in your path. |
||||
" On Debian / Ubuntu: |
||||
" sudo apt-get install ack-grep |
||||
" On your vimrc: |
||||
" let g:ackprg="ack-grep -H --nocolor --nogroup --column" |
||||
" |
||||
" With MacPorts: |
||||
" sudo port install p5-app-ack |
||||
|
||||
" Location of the ack utility |
||||
if !exists("g:ackprg") |
||||
let g:ackprg="ack -H --nocolor --nogroup --column" |
||||
endif |
||||
|
||||
function! s:Ack(cmd, args) |
||||
redraw |
||||
echo "Searching ..." |
||||
|
||||
" If no pattern is provided, search for the word under the cursor |
||||
if empty(a:args) |
||||
let l:grepargs = expand("<cword>") |
||||
else |
||||
let l:grepargs = a:args |
||||
end |
||||
|
||||
" Format, used to manage column jump |
||||
if a:cmd =~# '-g$' |
||||
let g:ackformat="%f" |
||||
else |
||||
let g:ackformat="%f:%l:%c:%m" |
||||
end |
||||
|
||||
let grepprg_bak=&grepprg |
||||
let grepformat_bak=&grepformat |
||||
try |
||||
let &grepprg=g:ackprg |
||||
let &grepformat=g:ackformat |
||||
silent execute a:cmd . " " . l:grepargs |
||||
finally |
||||
let &grepprg=grepprg_bak |
||||
let &grepformat=grepformat_bak |
||||
endtry |
||||
|
||||
if a:cmd =~# '^l' |
||||
botright lopen |
||||
else |
||||
botright copen |
||||
endif |
||||
|
||||
exec "nnoremap <silent> <buffer> q :ccl<CR>" |
||||
exec "nnoremap <silent> <buffer> t <C-W><CR><C-W>T" |
||||
exec "nnoremap <silent> <buffer> T <C-W><CR><C-W>TgT<C-W><C-W>" |
||||
exec "nnoremap <silent> <buffer> o <CR>" |
||||
exec "nnoremap <silent> <buffer> go <CR><C-W><C-W>" |
||||
exec "nnoremap <silent> <buffer> v <C-W><C-W><C-W>v<C-L><C-W><C-J><CR>" |
||||
exec "nnoremap <silent> <buffer> gv <C-W><C-W><C-W>v<C-L><C-W><C-J><CR><C-W><C-J>" |
||||
|
||||
" If highlighting is on, highlight the search keyword. |
||||
if exists("g:ackhighlight") |
||||
let @/=a:args |
||||
set hlsearch |
||||
end |
||||
|
||||
redraw! |
||||
endfunction |
||||
|
||||
function! s:AckFromSearch(cmd, args) |
||||
let search = getreg('/') |
||||
" translate vim regular expression to perl regular expression. |
||||
let search = substitute(search,'\(\\<\|\\>\)','\\b','g') |
||||
call s:Ack(a:cmd, '"' . search .'" '. a:args) |
||||
endfunction |
||||
|
||||
command! -bang -nargs=* -complete=file Ack call s:Ack('grep<bang>',<q-args>) |
||||
command! -bang -nargs=* -complete=file AckAdd call s:Ack('grepadd<bang>', <q-args>) |
||||
command! -bang -nargs=* -complete=file AckFromSearch call s:AckFromSearch('grep<bang>', <q-args>) |
||||
command! -bang -nargs=* -complete=file LAck call s:Ack('lgrep<bang>', <q-args>) |
||||
command! -bang -nargs=* -complete=file LAckAdd call s:Ack('lgrepadd<bang>', <q-args>) |
||||
command! -bang -nargs=* -complete=file AckFile call s:Ack('grep<bang> -g', <q-args>) |
@ -0,0 +1,20 @@ |
||||
This is a mirror of http://www.vim.org/scripts/script.php?script_id=42 |
||||
|
||||
With bufexplorer, you can quickly and easily switch between buffers by using the one of the default public interfaces: |
||||
|
||||
'\be' (normal open) or |
||||
'\bs' (force horizontal split open) or |
||||
'\bv' (force vertical split open) |
||||
|
||||
Once the bufexplorer window is open you can use the normal movement keys (hjkl) to move around and then use <Enter> or <Left-Mouse-Click> to select the buffer you would like to open. If you would like to have the selected buffer opened in a new tab, simply press either <Shift-Enter> or 't'. Please note that when opening a buffer in a tab, that if the buffer is already in another tab, bufexplorer can switch to that tab automatically for you if you would like. More about that in the supplied VIM help. |
||||
|
||||
Bufexplorer also offers various options including: |
||||
- Display the list of buffers in various sort orders including: |
||||
- Most Recently Used (MRU) which is the default |
||||
- Buffer number |
||||
- File name |
||||
- File extension |
||||
- Full file path name |
||||
- Delete buffer from list |
||||
|
||||
For more about options, sort orders, configuration options, etc. please see the supplied VIM help. |
@ -0,0 +1,513 @@ |
||||
*bufexplorer.txt* Buffer Explorer Last Change: 16 Feb 2010 |
||||
|
||||
Buffer Explorer *buffer-explorer* *bufexplorer* |
||||
Version 7.2.8 |
||||
|
||||
Plugin for easily exploring (or browsing) Vim |:buffers|. |
||||
|
||||
|bufexplorer-installation| Installation |
||||
|bufexplorer-usage| Usage |
||||
|bufexplorer-windowlayout| Window Layout |
||||
|bufexplorer-customization| Customization |
||||
|bufexplorer-changelog| Change Log |
||||
|bufexplorer-todo| Todo |
||||
|bufexplorer-credits| Credits |
||||
|
||||
For Vim version 7.0 and above. |
||||
This plugin is only available if 'compatible' is not set. |
||||
|
||||
{Vi does not have any of this} |
||||
|
||||
============================================================================== |
||||
INSTALLATION *bufexplorer-installation* |
||||
|
||||
To install: |
||||
- Download the bufexplorer.zip. |
||||
- Extract the zip archive into your runtime directory. |
||||
The archive contains plugin/bufexplorer.vim, and doc/bufexplorer.txt. |
||||
- Start Vim or goto an existing instance of Vim. |
||||
- Execute the following command: |
||||
> |
||||
:helptag <your runtime directory>/doc |
||||
< |
||||
This will generate all the help tags for any file located in the doc |
||||
directory. |
||||
|
||||
============================================================================== |
||||
USAGE *bufexplorer-usage* |
||||
|
||||
To start exploring in the current window, use: > |
||||
\be or :BufExplorer |
||||
To start exploring in a newly split horizontal window, use: > |
||||
\bs or :BufExplorerHorizontalSplit |
||||
To start exploring in a newly split vertical window, use: > |
||||
\bv or :BufExplorerVerticalSplit |
||||
|
||||
If you would like to use something other than '\', you may simply change the |
||||
leader (see |mapleader|). |
||||
|
||||
Note: If the current buffer is modified when bufexplorer started, the current |
||||
window is always split and the new bufexplorer is displayed in that new |
||||
window. |
||||
|
||||
Commands to use once exploring: |
||||
|
||||
<F1> Toggle help information. |
||||
<enter> Opens the buffer that is under the cursor into the current |
||||
window. |
||||
<leftmouse> Opens the buffer that is under the cursor into the current |
||||
window. |
||||
<shift-enter> Opens the buffer that is under the cursor in another tab. |
||||
d |:delete|the buffer under the cursor from the list. The |
||||
buffer's 'buflisted' is cleared. This allows for the buffer to |
||||
be displayed again using the 'show unlisted' command. |
||||
R Toggles relative path/absolute path. |
||||
T Toggles to show only buffers for this tab or not. |
||||
D |:wipeout|the buffer under the cursor from the list. When a |
||||
buffers is wiped, it will not be shown when unlisted buffer are |
||||
displayed. |
||||
f Toggles whether you are taken to the active window when |
||||
selecting a buffer or not. |
||||
o Opens the buffer that is under the cursor into the current |
||||
window. |
||||
p Toggles the showing of a split filename/pathname. |
||||
q Quit exploring. |
||||
r Reverses the order the buffers are listed in. |
||||
s Selects the order the buffers are listed in. Either by buffer |
||||
number, file name, file extension, most recently used (MRU), or |
||||
full path. |
||||
t Opens the buffer that is under the cursor in another tab. |
||||
u Toggles the showing of "unlisted" buffers. |
||||
|
||||
Once invoked, Buffer Explorer displays a sorted list (MRU is the default |
||||
sort method) of all the buffers that are currently opened. You are then |
||||
able to move the cursor to the line containing the buffer's name you are |
||||
wanting to act upon. Once you have selected the buffer you would like, |
||||
you can then either open it, close it(delete), resort the list, reverse |
||||
the sort, quit exploring and so on... |
||||
|
||||
=============================================================================== |
||||
WINDOW LAYOUT *bufexplorer-windowlayout* |
||||
|
||||
------------------------------------------------------------------------------- |
||||
" Press <F1> for Help |
||||
" Sorted by mru | Locate buffer | Absolute Split path |
||||
"= |
||||
01 %a bufexplorer.txt C:\Vim\vimfiles\doc line 87 |
||||
02 # bufexplorer.vim c:\Vim\vimfiles\plugin line 1 |
||||
------------------------------------------------------------------------------- |
||||
| | | | | |
||||
| | | | +-- Current Line #. |
||||
| | | +-- Relative/Full Path |
||||
| | +-- Buffer Name. |
||||
| +-- Buffer Attributes. See|:buffers|for more information. |
||||
+-- Buffer Number. See|:buffers|for more information. |
||||
|
||||
=============================================================================== |
||||
CUSTOMIZATION *bufexplorer-customization* |
||||
|
||||
*g:bufExplorerChgWin* |
||||
If set, bufexplorer will bring up the selected buffer in the window specified |
||||
by g:bufExplorerChgWin. |
||||
|
||||
*g:bufExplorerDefaultHelp* |
||||
To control whether the default help is displayed or not, use: > |
||||
let g:bufExplorerDefaultHelp=0 " Do not show default help. |
||||
let g:bufExplorerDefaultHelp=1 " Show default help. |
||||
The default is to show the default help. |
||||
|
||||
*g:bufExplorerDetailedHelp* |
||||
To control whether detailed help is display by, use: > |
||||
let g:bufExplorerDetailedHelp=0 " Do not show detailed help. |
||||
let g:bufExplorerDetailedHelp=1 " Show detailed help. |
||||
The default is NOT to show detailed help. |
||||
|
||||
*g:bufExplorerFindActive* |
||||
To control whether you are taken to the active window when selecting a buffer, |
||||
use: > |
||||
let g:bufExplorerFindActive=0 " Do not go to active window. |
||||
let g:bufExplorerFindActive=1 " Go to active window. |
||||
The default is to be taken to the active window. |
||||
|
||||
*g:bufExplorerFuncRef* |
||||
When a buffer is selected, the functions specified either singly or as a list |
||||
will be called. |
||||
|
||||
*g:bufExplorerReverseSort* |
||||
To control whether to sort the buffer in reverse order or not, use: > |
||||
let g:bufExplorerReverseSort=0 " Do not sort in reverse order. |
||||
let g:bufExplorerReverseSort=1 " Sort in reverse order. |
||||
The default is NOT to sort in reverse order. |
||||
|
||||
*g:bufExplorerShowDirectories* |
||||
Directories usually show up in the list from using a command like ":e .". |
||||
To control whether to show directories in the buffer list or not, use: > |
||||
let g:bufExplorerShowDirectories=1 " Show directories. |
||||
let g:bufExplorerShowDirectories=0 " Don't show directories. |
||||
The default is to show directories. |
||||
|
||||
*g:bufExplorerShowRelativePath* |
||||
To control whether to show absolute paths or relative to the current |
||||
directory, use: > |
||||
let g:bufExplorerShowRelativePath=0 " Show absolute paths. |
||||
let g:bufExplorerShowRelativePath=1 " Show relative paths. |
||||
The default is to show absolute paths. |
||||
|
||||
*g:bufExplorerShowTabBuffer* |
||||
To control weither or not to show buffers on for the specific tab or not, use: > |
||||
let g:bufExplorerShowTabBuffer=0 " No. |
||||
let g:bufExplorerShowTabBuffer=1 " Yes. |
||||
The default is not to show. |
||||
|
||||
*g:bufExplorerShowUnlisted* |
||||
To control whether to show unlisted buffer or not, use: > |
||||
let g:bufExplorerShowUnlisted=0 " Do not show unlisted buffers. |
||||
let g:bufExplorerShowUnlisted=1 " Show unlisted buffers. |
||||
The default is to NOT show unlisted buffers. |
||||
|
||||
*g:bufExplorerSortBy* |
||||
To control what field the buffers are sorted by, use: > |
||||
let g:bufExplorerSortBy='extension' " Sort by file extension. |
||||
let g:bufExplorerSortBy='fullpath' " Sort by full file path name. |
||||
let g:bufExplorerSortBy='mru' " Sort by most recently used. |
||||
let g:bufExplorerSortBy='name' " Sort by the buffer's name. |
||||
let g:bufExplorerSortBy='number' " Sort by the buffer's number. |
||||
The default is to sort by mru. |
||||
|
||||
*g:bufExplorerSplitBelow* |
||||
To control where the new split window will be placed above or below the |
||||
current window, use: > |
||||
let g:bufExplorerSplitBelow=1 " Split new window below current. |
||||
let g:bufExplorerSplitBelow=0 " Split new window above current. |
||||
The default is to use what ever is set by the global &splitbelow |
||||
variable. |
||||
|
||||
*g:bufExplorerSplitOutPathName* |
||||
To control whether to split out the path and file name or not, use: > |
||||
let g:bufExplorerSplitOutPathName=1 " Split the path and file name. |
||||
let g:bufExplorerSplitOutPathName=0 " Don't split the path and file |
||||
" name. |
||||
The default is to split the path and file name. |
||||
|
||||
*g:bufExplorerSplitRight* |
||||
To control where the new vsplit window will be placed to the left or right of |
||||
current window, use: > |
||||
let g:bufExplorerSplitRight=0 " Split left. |
||||
let g:bufExplorerSplitRight=1 " Split right. |
||||
The default is to use the global &splitright. |
||||
|
||||
=============================================================================== |
||||
CHANGE LOG *bufexplorer-changelog* |
||||
|
||||
7.2.8 - Enhancements: |
||||
* Thanks to Charles Campbell for integrating bufexplorer with GDBMGR. |
||||
http://mysite.verizon.net/astronaut/vim/index.html#GDBMGR |
||||
7.2.7 - Fix: |
||||
* My 1st attempt to fix the "cache" issue where buffers information |
||||
has changed but the cache/display does not reflect those changes. |
||||
More work still needs to be done. |
||||
7.2.6 - Fix: |
||||
* Thanks to Michael Henry for pointing out that I totally forgot to |
||||
update the inline help to reflect the previous change to the 'd' |
||||
and 'D' keys. Opps! |
||||
7.2.5 - Fix: |
||||
* Philip Morant suggested switching the command (bwipe) associated |
||||
with the 'd' key with the command (bdelete) associated with the 'D' |
||||
key. This made sense since the 'd' key is more likely to be used |
||||
compared to the 'D' key. |
||||
7.2.4 - Fix: |
||||
* I did not implement the patch provided by Godefroid Chapelle |
||||
correctly. I missed one line which happened to be the most |
||||
important one :) |
||||
7.2.3 - Enhancements: |
||||
* Thanks to David Fishburn for helping me out with a much needed |
||||
code overhaul as well as some awesome performance enhancements. |
||||
He also reworked the handling of tabs. |
||||
* Thanks to Vladimir Dobriakov for making the suggestions on |
||||
enhancing the documentation to include a better explaination of |
||||
what is contained in the main bufexplorer window. |
||||
* Thanks to Yuriy Ershov for added code that when the bufexplorer |
||||
window is opened, the cursor is now positioned at the line with the |
||||
active buffer (useful in non-MRU sort modes). |
||||
* Yuriy also added the abiltiy to cycle through the sort fields in |
||||
reverse order. |
||||
Fixes: |
||||
* Thanks to Michael Henry for supplying a patch that allows |
||||
bufexplorer to be opened even when there is one buffer or less. |
||||
* Thanks to Godefroid Chapelle for supplying a patch that fixed |
||||
MRU sort order after loading a session. |
||||
7.2.2 - Fixes: |
||||
* Thanks to David L. Dight for spotting and fixing an issue when |
||||
using ctrl^. bufexplorer would incorrectly handle the previous |
||||
buffer so that when ctrl^ was pressed the incorrect file was opened. |
||||
7.2.1 - Fixes: |
||||
* Thanks to Dimitar for spotting and fixing a feature that was |
||||
inadvertently left out of the previous version. The feature was |
||||
when bufexplorer was used together with WinManager, you could use |
||||
the tab key to open a buffer in a split window. |
||||
7.2.0 - Enhancements: |
||||
* For all those missing the \bs and \bv commands, these have now |
||||
returned. Thanks to Phil O'Connell for asking for the return of |
||||
these missing features and helping test out this version. |
||||
Fixes: |
||||
* Fixed problem with the bufExplorerFindActive code not working |
||||
correctly. |
||||
* Fixed an incompatibility between bufexplorer and netrw that caused |
||||
buffers to be incorrectly removed from the MRU list. |
||||
7.1.7 - Fixes: |
||||
* TaCahiroy fixed several issues related to opening a buffer in a |
||||
tab. |
||||
7.1.6 - Fixes: |
||||
* Removed ff=unix from modeline in bufexplorer.txt. Found by Bill |
||||
McCarthy. |
||||
7.1.5 - Fixes: |
||||
* Could not open unnamed buffers. Fixed by TaCahiroy. |
||||
7.1.4 - Fixes: |
||||
* Sometimes when a file's path has 'white space' in it, extra buffers |
||||
would be created containing each piece of the path. i.e: |
||||
opening c:\document and settings\test.txt would create a buffer |
||||
named "and" and a buffer named "Documents". This was reported and |
||||
fixed by TaCa Yoss. |
||||
7.1.3 - Fixes: |
||||
* Added code to allow only one instance of the plugin to run at a |
||||
time. Thanks Dennis Hostetler. |
||||
7.1.2 - Fixes: |
||||
* Fixed a jumplist issue spotted by JiangJun. I overlooked the |
||||
'jumplist' and with a couple calls to 'keepjumps', everything is |
||||
fine again. |
||||
* Went back to just having a plugin file, no autoload file. By having |
||||
the autoload, WinManager was no longer working and without really |
||||
digging into the cause, it was easier to go back to using just a |
||||
plugin file. |
||||
7.1.1 - Fixes: |
||||
* A problem spotted by Thomas Arendsen Hein. |
||||
When running Vim (7.1.94), error E493 was being thrown. |
||||
Enhancements: |
||||
* Added 'D' for 'delete' buffer as the 'd' command was a 'wipe' |
||||
buffer. |
||||
7.1.0 - Another 'major' update, some by Dave Larson, some by me. |
||||
* Making use of 'autoload' now to make the plugin load quicker. |
||||
* Removed '\bs' and '\bv'. These are now controlled by the user. The |
||||
user can issue a ':sp' or ':vs' to create a horizontal or vertical |
||||
split window and then issue a '\be' |
||||
* Added handling of tabs. |
||||
7.0.17 - Fixed issue with 'drop' command. |
||||
Various enhancements and improvements. |
||||
7.0.16 - Fixed issue reported by Liu Jiaping on non Windows systems, which was |
||||
... |
||||
Open file1, open file2, modify file1, open bufexplorer, you get the |
||||
following error: |
||||
|
||||
--------8<-------- |
||||
Error detected while processing function |
||||
<SNR>14_StartBufExplorer..<SNR>14_SplitOpen: |
||||
line 4: |
||||
E37: No write since last change (add ! to override) |
||||
|
||||
But the worse thing is, when I want to save the current buffer and |
||||
type ':w', I get another error message: |
||||
E382: Cannot write, 'buftype' option is set |
||||
--------8<-------- |
||||
|
||||
7.0.15 - Thanks to Mark Smithfield for suggesting bufexplorer needed to handle |
||||
the ':args' command. |
||||
7.0.14 - Thanks to Randall Hansen for removing the requirement of terminal |
||||
versions to be recompiled with 'gui' support so the 'drop' command |
||||
would work. The 'drop' command is really not needed in terminal |
||||
versions. |
||||
7.0.13 - Fixed integration with WinManager. |
||||
Thanks to Dave Eggum for another update. |
||||
- Fix: The detailed help didn't display the mapping for toggling |
||||
the split type, even though the split type is displayed. |
||||
- Fixed incorrect description in the detailed help for toggling |
||||
relative or full paths. |
||||
- Deprecated s:ExtractBufferNbr(). Vim's str2nr() does the same |
||||
thing. |
||||
- Created a s:Set() function that sets a variable only if it hasn't |
||||
already been defined. It's useful for initializing all those |
||||
default settings. |
||||
- Removed checks for repetitive command definitions. They were |
||||
unnecessary. |
||||
- Made the help highlighting a little more fancy. |
||||
- Minor reverse compatibility issue: Changed ambiguous setting |
||||
names to be more descriptive of what they do (also makes the code |
||||
easier to follow): |
||||
Changed bufExplorerSortDirection to bufExplorerReverseSort |
||||
Changed bufExplorerSplitType to bufExplorerSplitVertical |
||||
Changed bufExplorerOpenMode to bufExplorerUseCurrentWindow |
||||
- When the BufExplorer window closes, all the file-local marks are |
||||
now deleted. This may have the benefit of cleaning up some of the |
||||
jumplist. |
||||
- Changed the name of the parameter for StartBufExplorer from |
||||
"split" to "open". The parameter is a string which specifies how |
||||
the buffer will be open, not if it is split or not. |
||||
- Deprecated DoAnyMoreBuffersExist() - it is a one line function |
||||
only used in one spot. |
||||
- Created four functions (SplitOpen(), RebuildBufferList(), |
||||
UpdateHelpStatus() and ReSortListing()) all with one purpose - to |
||||
reduce repeated code. |
||||
- Changed the name of AddHeader() to CreateHelp() to be more |
||||
descriptive of what it does. It now returns an array instead of |
||||
updating the window directly. This has the benefit of making the |
||||
code more efficient since the text the function returns is used a |
||||
little differently in the two places the function is called. |
||||
- Other minor simplifications. |
||||
7.0.12 - MAJOR Update. |
||||
This version will ONLY run with Vim version 7.0 or greater. |
||||
Dave Eggum has made some 'significant' updates to this latest |
||||
version: |
||||
- Added BufExplorerGetAltBuf() global function to be used in the |
||||
userโs rulerformat. |
||||
- Added g:bufExplorerSplitRight option. |
||||
- Added g:bufExplorerShowRelativePath option with mapping. |
||||
- Added current line highlighting. |
||||
- The split type can now be changed whether bufexplorer is opened |
||||
in split mode or not. |
||||
- Various major and minor bug fixes and speed improvements. |
||||
- Sort by extension. |
||||
Other improvements/changes: |
||||
- Changed the help key from '?' to <F1> to be more 'standard'. |
||||
- Fixed splitting of vertical bufexplorer window. |
||||
Hopefully I have not forgot something :) |
||||
7.0.11 - Fixed a couple of highlighting bugs, reported by David Eggum. He also |
||||
changed passive voice to active on a couple of warning messages. |
||||
7.0.10 - Fixed bug report by Xiangjiang Ma. If the 'ssl' option is set, |
||||
the slash character used when displaying the path was incorrect. |
||||
7.0.9 - Martin Grenfell found and eliminated an annoying bug in the |
||||
bufexplorer/winmanager integration. The bug was were an |
||||
annoying message would be displayed when a window was split or |
||||
a new file was opened in a new window. Thanks Martin! |
||||
7.0.8 - Thanks to Mike Li for catching a bug in the WinManager integration. |
||||
The bug was related to the incorrect displaying of the buffer |
||||
explorer's window title. |
||||
7.0.7 - Thanks to Jeremy Cowgar for adding a new enhancement. This |
||||
enhancement allows the user to press 'S', that is capital S, which |
||||
will open the buffer under the cursor in a newly created split |
||||
window. |
||||
7.0.6 - Thanks to Larry Zhang for finding a bug in the "split" buffer code. |
||||
If you force set g:bufExplorerSplitType='v' in your vimrc, and if you |
||||
tried to do a \bs to split the bufexplorer window, it would always |
||||
split horizontal, not vertical. He also found that I had a typeo in |
||||
that the variable g:bufExplorerSplitVertSize was all lower case in |
||||
the documentation which was incorrect. |
||||
7.0.5 - Thanks to Mun Johl for pointing out a bug that if a buffer was |
||||
modified, the '+' was not showing up correctly. |
||||
7.0.4 - Fixed a problem discovered first by Xiangjiang Ma. Well since I've |
||||
been using vim 7.0 and not 6.3, I started using a function (getftype) |
||||
that is not in 6.3. So for backward compatibility, I conditionaly use |
||||
this function now. Thus, the g:bufExplorerShowDirectories feature is |
||||
only available when using vim 7.0 and above. |
||||
7.0.3 - Thanks to Erwin Waterlander for finding a problem when the last |
||||
buffer was deleted. This issue got me to rewrite the buffer display |
||||
logic (which I've wanted to do for sometime now). |
||||
Also great thanks to Dave Eggum for coming up with idea for |
||||
g:bufExplorerShowDirectories. Read the above information about this |
||||
feature. |
||||
7.0.2 - Thanks to Thomas Arendsen Hein for finding a problem when a user |
||||
has the default help turned off and then brought up the explorer. An |
||||
E493 would be displayed. |
||||
7.0.1 - Thanks to Erwin Waterlander for finding a couple problems. |
||||
The first problem allowed a modified buffer to be deleted. Opps! The |
||||
second problem occurred when several files were opened, BufExplorer |
||||
was started, the current buffer was deleted using the 'd' option, and |
||||
then BufExplorer was exited. The deleted buffer was still visible |
||||
while it is not in the buffers list. Opps again! |
||||
7.0.0 - Thanks to Shankar R. for suggesting to add the ability to set |
||||
the fixed width (g:bufExplorerSplitVertSize) of a new window |
||||
when opening bufexplorer vertically and fixed height |
||||
(g:bufExplorerSplitHorzSize) of a new window when opening |
||||
bufexplorer horizontally. By default, the windows are normally |
||||
split to use half the existing width or height. |
||||
6.3.0 - Added keepjumps so that the jumps list would not get cluttered with |
||||
bufexplorer related stuff. |
||||
6.2.3 - Thanks to Jay Logan for finding a bug in the vertical split position |
||||
of the code. When selecting that the window was to be split |
||||
vertically by doing a '\bv', from then on, all splits, i.e. '\bs', |
||||
were split vertically, even though g:bufExplorerSplitType was not set |
||||
to 'v'. |
||||
6.2.2 - Thanks to Patrik Modesto for adding a small improvement. For some |
||||
reason his bufexplorer window was always showing up folded. He added |
||||
'setlocal nofoldenable' and it was fixed. |
||||
6.2.1 - Thanks goes out to Takashi Matsuo for added the 'fullPath' sorting |
||||
logic and option. |
||||
6.2.0 - Thanks goes out to Simon Johann-Ganter for spotting and fixing a |
||||
problem in that the last search pattern is overridden by the search |
||||
pattern for blank lines. |
||||
6.1.6 - Thanks to Artem Chuprina for finding a pesky bug that has been around |
||||
for sometime now. The <esc> key mapping was causing the buffer |
||||
explored to close prematurely when vim was run in an xterm. The <esc> |
||||
key mapping is now removed. |
||||
6.1.5 - Thanks to Khorev Sergey. Added option to show default help or not. |
||||
6.1.4 - Thanks goes out to Valery Kondakoff for suggesting the addition of |
||||
setlocal nonumber and foldcolumn=0. This allows for line numbering |
||||
and folding to be turned off temporarily while in the explorer. |
||||
6.1.3 - Added folding. Did some code cleanup. Added the ability to force the |
||||
newly split window to be temporarily vertical, which was suggested by |
||||
Thomas Glanzmann. |
||||
6.1.2 - Now pressing the <esc> key will quit, just like 'q'. |
||||
Added folds to hide winmanager configuration. |
||||
If anyone had the 'C' option in their cpoptions they would receive |
||||
a E10 error on startup of BufExplorer. cpo is now saved, updated and |
||||
restored. Thanks to Charles E Campbell, Jr. |
||||
Attempted to make sure there can only be one BufExplorer window open |
||||
at a time. |
||||
6.1.1 - Thanks to Brian D. Goodwin for adding toupper to FileNameCmp. This |
||||
way buffers sorted by name will be in the correct order regardless of |
||||
case. |
||||
6.0.16 - Thanks to Andre Pang for the original patch/idea to get bufexplorer |
||||
to work in insertmode/modeless mode (evim). Added Initialize |
||||
and Cleanup autocommands to handle commands that need to be |
||||
performed when starting or leaving bufexplorer. |
||||
6.0.15 - Srinath Avadhanulax added a patch for winmanager.vim. |
||||
6.0.14 - Fix a few more bug that I thought I already had fixed. Thanks |
||||
to Eric Bloodworth for adding 'Open Mode/Edit in Place'. Added |
||||
vertical splitting. |
||||
6.0.13 - Thanks to Charles E Campbell, Jr. for pointing out some embarrassing |
||||
typos that I had in the documentation. I guess I need to run |
||||
the spell checker more :o) |
||||
6.0.12 - Thanks to Madoka Machitani, for the tip on adding the augroup command |
||||
around the MRUList autocommands. |
||||
6.0.11 - Fixed bug report by Xiangjiang Ma. '"=' was being added to the |
||||
search history which messed up hlsearch. |
||||
6.0.10 - Added the necessary hooks so that the Srinath Avadhanula's |
||||
winmanager.vim script could more easily integrate with this script. |
||||
Tried to improve performance. |
||||
6.0.9 - Added MRU (Most Recently Used) sort ordering. |
||||
6.0.8 - Was not resetting the showcmd command correctly. |
||||
Added nifty help file. |
||||
6.0.7 - Thanks to Brett Carlane for some great enhancements. Some are added, |
||||
some are not, yet. Added highlighting of current and alternate |
||||
filenames. Added splitting of path/filename toggle. Reworked |
||||
ShowBuffers(). |
||||
Changed my email address. |
||||
6.0.6 - Copyright notice added. Needed this so that it could be distributed |
||||
with Debian Linux. Fixed problem with the SortListing() function |
||||
failing when there was only one buffer to display. |
||||
6.0.5 - Fixed problems reported by David Pascoe, in that you where unable to |
||||
hit 'd' on a buffer that belonged to a files that no longer existed |
||||
and that the 'yank' buffer was being overridden by the help text when |
||||
the bufexplorer was opened. |
||||
6.0.4 - Thanks to Charles Campbell, Jr. for making this plugin more plugin |
||||
*compliant*, adding default keymappings of <Leader>be and <Leader>bs |
||||
as well as fixing the 'w:sortDirLabel not being defined' bug. |
||||
6.0.3 - Added sorting capabilities. Sort taken from explorer.vim. |
||||
6.0.2 - Can't remember. (2001-07-25) |
||||
6.0.1 - Initial release. |
||||
|
||||
=============================================================================== |
||||
TODO *bufexplorer-todo* |
||||
|
||||
- Nothing as of now, buf if you have any suggestions, drop me an email. |
||||
|
||||
=============================================================================== |
||||
CREDITS *bufexplorer-credits* |
||||
|
||||
Author: Jeff Lanzarotta <delux256-vim at yahoo dot com> |
||||
|
||||
Credit must go out to Bram Moolenaar and all the Vim developers for |
||||
making the world's best editor (IMHO). I also want to thank everyone who |
||||
helped and gave me suggestions. I wouldn't want to leave anyone out so I |
||||
won't list names. |
||||
|
||||
=============================================================================== |
||||
vim:tw=78:noet:wrap:ts=8:ft=help:norl: |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,6 @@ |
||||
*.markdown |
||||
*.zip |
||||
note.txt |
||||
tags |
||||
.hg* |
||||
tmp/* |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,140 @@ |
||||
" ============================================================================= |
||||
" File: autoload/ctrlp/bookmarkdir.vim |
||||
" Description: Bookmarked directories extension |
||||
" Author: Kien Nguyen <github.com/kien> |
||||
" ============================================================================= |
||||
|
||||
" Init {{{1 |
||||
if exists('g:loaded_ctrlp_bookmarkdir') && g:loaded_ctrlp_bookmarkdir |
||||
fini |
||||
en |
||||
let g:loaded_ctrlp_bookmarkdir = 1 |
||||
|
||||
cal add(g:ctrlp_ext_vars, { |
||||
\ 'init': 'ctrlp#bookmarkdir#init()', |
||||
\ 'accept': 'ctrlp#bookmarkdir#accept', |
||||
\ 'lname': 'bookmarked dirs', |
||||
\ 'sname': 'bkd', |
||||
\ 'type': 'tabs', |
||||
\ 'opmul': 1, |
||||
\ 'nolim': 1, |
||||
\ 'wipe': 'ctrlp#bookmarkdir#remove', |
||||
\ }) |
||||
|
||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) |
||||
" Utilities {{{1 |
||||
fu! s:getinput(str, ...) |
||||
echoh Identifier |
||||
cal inputsave() |
||||
let input = call('input', a:0 ? [a:str] + a:000 : [a:str]) |
||||
cal inputrestore() |
||||
echoh None |
||||
retu input |
||||
endf |
||||
|
||||
fu! s:cachefile() |
||||
if !exists('s:cadir') || !exists('s:cafile') |
||||
let s:cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'bkd' |
||||
let s:cafile = s:cadir.ctrlp#utils#lash().'cache.txt' |
||||
en |
||||
retu s:cafile |
||||
endf |
||||
|
||||
fu! s:writecache(lines) |
||||
cal ctrlp#utils#writecache(a:lines, s:cadir, s:cafile) |
||||
endf |
||||
|
||||
fu! s:getbookmarks() |
||||
retu ctrlp#utils#readfile(s:cachefile()) |
||||
endf |
||||
|
||||
fu! s:savebookmark(name, cwd) |
||||
let cwds = exists('+ssl') ? [tr(a:cwd, '\', '/'), tr(a:cwd, '/', '\')] : [a:cwd] |
||||
let entries = filter(s:getbookmarks(), 'index(cwds, s:parts(v:val)[1]) < 0') |
||||
cal s:writecache(insert(entries, a:name.' '.a:cwd)) |
||||
endf |
||||
|
||||
fu! s:setentries() |
||||
let time = getftime(s:cachefile()) |
||||
if !( exists('s:bookmarks') && time == s:bookmarks[0] ) |
||||
let s:bookmarks = [time, s:getbookmarks()] |
||||
en |
||||
endf |
||||
|
||||
fu! s:parts(str) |
||||
let mlist = matchlist(a:str, '\v([^\t]+)\t(.*)$') |
||||
retu mlist != [] ? mlist[1:2] : ['', ''] |
||||
endf |
||||
|
||||
fu! s:process(entries, type) |
||||
retu map(a:entries, 's:modify(v:val, a:type)') |
||||
endf |
||||
|
||||
fu! s:modify(entry, type) |
||||
let [name, dir] = s:parts(a:entry) |
||||
let dir = fnamemodify(dir, a:type) |
||||
retu name.' '.( dir == '' ? '.' : dir ) |
||||
endf |
||||
|
||||
fu! s:msg(name, cwd) |
||||
redr |
||||
echoh Identifier | echon 'Bookmarked ' | echoh Constant |
||||
echon a:name.' ' | echoh Directory | echon a:cwd |
||||
echoh None |
||||
endf |
||||
|
||||
fu! s:syntax() |
||||
if !ctrlp#nosy() |
||||
cal ctrlp#hicheck('CtrlPBookmark', 'Identifier') |
||||
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment') |
||||
sy match CtrlPBookmark '^> [^\t]\+' contains=CtrlPLinePre |
||||
sy match CtrlPTabExtra '\zs\t.*\ze$' |
||||
en |
||||
endf |
||||
" Public {{{1 |
||||
fu! ctrlp#bookmarkdir#init() |
||||
cal s:setentries() |
||||
cal s:syntax() |
||||
retu s:process(copy(s:bookmarks[1]), ':.') |
||||
endf |
||||
|
||||
fu! ctrlp#bookmarkdir#accept(mode, str) |
||||
let parts = s:parts(s:modify(a:str, ':p')) |
||||
cal call('s:savebookmark', parts) |
||||
if a:mode =~ 't\|v\|h' |
||||
cal ctrlp#exit() |
||||
en |
||||
cal ctrlp#setdir(parts[1], a:mode =~ 't\|h' ? 'chd!' : 'lc!') |
||||
if a:mode == 'e' |
||||
cal ctrlp#switchtype(0) |
||||
cal ctrlp#recordhist() |
||||
cal ctrlp#prtclear() |
||||
en |
||||
endf |
||||
|
||||
fu! ctrlp#bookmarkdir#add(dir) |
||||
let str = 'Directory to bookmark: ' |
||||
let cwd = a:dir != '' ? a:dir : s:getinput(str, getcwd(), 'dir') |
||||
if cwd == '' | retu | en |
||||
let cwd = fnamemodify(cwd, ':p') |
||||
let name = s:getinput('Bookmark as: ', cwd) |
||||
if name == '' | retu | en |
||||
let name = tr(name, ' ', ' ') |
||||
cal s:savebookmark(name, cwd) |
||||
cal s:msg(name, cwd) |
||||
endf |
||||
|
||||
fu! ctrlp#bookmarkdir#remove(entries) |
||||
cal s:process(a:entries, ':p') |
||||
cal s:writecache(a:entries == [] ? [] : |
||||
\ filter(s:getbookmarks(), 'index(a:entries, v:val) < 0')) |
||||
cal s:setentries() |
||||
retu s:process(copy(s:bookmarks[1]), ':.') |
||||
endf |
||||
|
||||
fu! ctrlp#bookmarkdir#id() |
||||
retu s:id |
||||
endf |
||||
"}}} |
||||
|
||||
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |
@ -0,0 +1,239 @@ |
||||
" ============================================================================= |
||||
" File: autoload/ctrlp/buffertag.vim |
||||
" Description: Buffer Tag extension |
||||
" Maintainer: Kien Nguyen <github.com/kien> |
||||
" Credits: Much of the code was taken from tagbar.vim by Jan Larres, plus |
||||
" a few lines from taglist.vim by Yegappan Lakshmanan and from |
||||
" buffertag.vim by Takeshi Nishida. |
||||
" ============================================================================= |
||||
|
||||
" Init {{{1 |
||||
if exists('g:loaded_ctrlp_buftag') && g:loaded_ctrlp_buftag |
||||
fini |
||||
en |
||||
let g:loaded_ctrlp_buftag = 1 |
||||
|
||||
cal add(g:ctrlp_ext_vars, { |
||||
\ 'init': 'ctrlp#buffertag#init(s:crfile)', |
||||
\ 'accept': 'ctrlp#buffertag#accept', |
||||
\ 'lname': 'buffer tags', |
||||
\ 'sname': 'bft', |
||||
\ 'exit': 'ctrlp#buffertag#exit()', |
||||
\ 'type': 'tabs', |
||||
\ 'opts': 'ctrlp#buffertag#opts()', |
||||
\ }) |
||||
|
||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) |
||||
|
||||
let [s:pref, s:opts] = ['g:ctrlp_buftag_', { |
||||
\ 'systemenc': ['s:enc', &enc], |
||||
\ 'ctags_bin': ['s:bin', ''], |
||||
\ 'types': ['s:usr_types', {}], |
||||
\ }] |
||||
|
||||
let s:bins = [ |
||||
\ 'ctags-exuberant', |
||||
\ 'exuberant-ctags', |
||||
\ 'exctags', |
||||
\ '/usr/local/bin/ctags', |
||||
\ '/opt/local/bin/ctags', |
||||
\ 'ctags', |
||||
\ 'ctags.exe', |
||||
\ 'tags', |
||||
\ ] |
||||
|
||||
let s:types = { |
||||
\ 'asm' : '%sasm%sasm%sdlmt', |
||||
\ 'aspperl': '%sasp%sasp%sfsv', |
||||
\ 'aspvbs' : '%sasp%sasp%sfsv', |
||||
\ 'awk' : '%sawk%sawk%sf', |
||||
\ 'beta' : '%sbeta%sbeta%sfsv', |
||||
\ 'c' : '%sc%sc%sdgsutvf', |
||||
\ 'cpp' : '%sc++%sc++%snvdtcgsuf', |
||||
\ 'cs' : '%sc#%sc#%sdtncEgsipm', |
||||
\ 'cobol' : '%scobol%scobol%sdfgpPs', |
||||
\ 'eiffel' : '%seiffel%seiffel%scf', |
||||
\ 'erlang' : '%serlang%serlang%sdrmf', |
||||
\ 'expect' : '%stcl%stcl%scfp', |
||||
\ 'fortran': '%sfortran%sfortran%spbceiklmntvfs', |
||||
\ 'html' : '%shtml%shtml%saf', |
||||
\ 'java' : '%sjava%sjava%spcifm', |
||||
\ 'javascript': '%sjavascript%sjavascript%sf', |
||||
\ 'lisp' : '%slisp%slisp%sf', |
||||
\ 'lua' : '%slua%slua%sf', |
||||
\ 'make' : '%smake%smake%sm', |
||||
\ 'pascal' : '%spascal%spascal%sfp', |
||||
\ 'perl' : '%sperl%sperl%sclps', |
||||
\ 'php' : '%sphp%sphp%scdvf', |
||||
\ 'python' : '%spython%spython%scmf', |
||||
\ 'rexx' : '%srexx%srexx%ss', |
||||
\ 'ruby' : '%sruby%sruby%scfFm', |
||||
\ 'scheme' : '%sscheme%sscheme%ssf', |
||||
\ 'sh' : '%ssh%ssh%sf', |
||||
\ 'csh' : '%ssh%ssh%sf', |
||||
\ 'zsh' : '%ssh%ssh%sf', |
||||
\ 'slang' : '%sslang%sslang%snf', |
||||
\ 'sml' : '%ssml%ssml%secsrtvf', |
||||
\ 'sql' : '%ssql%ssql%scFPrstTvfp', |
||||
\ 'tcl' : '%stcl%stcl%scfmp', |
||||
\ 'vera' : '%svera%svera%scdefgmpPtTvx', |
||||
\ 'verilog': '%sverilog%sverilog%smcPertwpvf', |
||||
\ 'vim' : '%svim%svim%savf', |
||||
\ 'yacc' : '%syacc%syacc%sl', |
||||
\ } |
||||
|
||||
cal map(s:types, 'printf(v:val, "--language-force=", " --", "-types=")') |
||||
|
||||
if executable('jsctags') |
||||
cal extend(s:types, { 'javascript': { 'args': '-f -', 'bin': 'jsctags' } }) |
||||
en |
||||
|
||||
fu! ctrlp#buffertag#opts() |
||||
for [ke, va] in items(s:opts) |
||||
let {va[0]} = exists(s:pref.ke) ? {s:pref.ke} : va[1] |
||||
endfo |
||||
" Ctags bin |
||||
if empty(s:bin) |
||||
for bin in s:bins | if executable(bin) |
||||
let s:bin = bin |
||||
brea |
||||
en | endfo |
||||
el |
||||
let s:bin = expand(s:bin, 1) |
||||
en |
||||
" Types |
||||
cal extend(s:types, s:usr_types) |
||||
endf |
||||
" Utilities {{{1 |
||||
fu! s:validfile(fname, ftype) |
||||
if ( !empty(a:fname) || !empty(a:ftype) ) && filereadable(a:fname) |
||||
\ && index(keys(s:types), a:ftype) >= 0 | retu 1 | en |
||||
retu 0 |
||||
endf |
||||
|
||||
fu! s:exectags(cmd) |
||||
if exists('+ssl') |
||||
let [ssl, &ssl] = [&ssl, 0] |
||||
en |
||||
if &sh =~ 'cmd\.exe' |
||||
let [sxq, &sxq, shcf, &shcf] = [&sxq, '"', &shcf, '/s /c'] |
||||
en |
||||
let output = system(a:cmd) |
||||
if &sh =~ 'cmd\.exe' |
||||
let [&sxq, &shcf] = [sxq, shcf] |
||||
en |
||||
if exists('+ssl') |
||||
let &ssl = ssl |
||||
en |
||||
retu output |
||||
endf |
||||
|
||||
fu! s:exectagsonfile(fname, ftype) |
||||
let [ags, ft] = ['-f - --sort=no --excmd=pattern --fields=nKs ', a:ftype] |
||||
if type(s:types[ft]) == 1 |
||||
let ags .= s:types[ft] |
||||
let bin = s:bin |
||||
elsei type(s:types[ft]) == 4 |
||||
let ags = s:types[ft]['args'] |
||||
let bin = expand(s:types[ft]['bin'], 1) |
||||
en |
||||
if empty(bin) | retu '' | en |
||||
let cmd = s:esctagscmd(bin, ags, a:fname) |
||||
if empty(cmd) | retu '' | en |
||||
let output = s:exectags(cmd) |
||||
if v:shell_error || output =~ 'Warning: cannot open' | retu '' | en |
||||
retu output |
||||
endf |
||||
|
||||
fu! s:esctagscmd(bin, args, ...) |
||||
if exists('+ssl') |
||||
let [ssl, &ssl] = [&ssl, 0] |
||||
en |
||||
let fname = a:0 == 1 ? shellescape(a:1) : '' |
||||
let cmd = shellescape(a:bin).' '.a:args.' '.fname |
||||
if exists('+ssl') |
||||
let &ssl = ssl |
||||
en |
||||
if has('iconv') |
||||
let last = s:enc != &enc ? s:enc : !empty($LANG) ? $LANG : &enc |
||||
let cmd = iconv(cmd, &enc, last) |
||||
en |
||||
retu cmd |
||||
endf |
||||
|
||||
fu! s:process(fname, ftype) |
||||
if !s:validfile(a:fname, a:ftype) | retu [] | endif |
||||
let ftime = getftime(a:fname) |
||||
if has_key(g:ctrlp_buftags, a:fname) |
||||
\ && g:ctrlp_buftags[a:fname]['time'] >= ftime |
||||
let lines = g:ctrlp_buftags[a:fname]['lines'] |
||||
el |
||||
let data = s:exectagsonfile(a:fname, a:ftype) |
||||
let [raw, lines] = [split(data, '\n\+'), []] |
||||
for line in raw | if len(split(line, ';"')) == 2 |
||||
let parsed_line = s:parseline(line) |
||||
if parsed_line != '' |
||||
cal add(lines, parsed_line) |
||||
en |
||||
en | endfo |
||||
let cache = { a:fname : { 'time': ftime, 'lines': lines } } |
||||
cal extend(g:ctrlp_buftags, cache) |
||||
en |
||||
retu lines |
||||
endf |
||||
|
||||
fu! s:parseline(line) |
||||
let eval = '\v^([^\t]+)\t(.+)\t\/\^(.+)\$\/\;\"\t(.+)\tline(no)?\:(\d+)' |
||||
let vals = matchlist(a:line, eval) |
||||
if vals == [] | retu '' | en |
||||
let [bufnr, bufname] = [bufnr('^'.vals[2].'$'), fnamemodify(vals[2], ':p:t')] |
||||
retu vals[1].' '.vals[4].'|'.bufnr.':'.bufname.'|'.vals[6].'| '.vals[3] |
||||
endf |
||||
|
||||
fu! s:syntax() |
||||
if !ctrlp#nosy() |
||||
cal ctrlp#hicheck('CtrlPTagKind', 'Title') |
||||
cal ctrlp#hicheck('CtrlPBufName', 'Directory') |
||||
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment') |
||||
sy match CtrlPTagKind '\zs[^\t|]\+\ze|\d\+:[^|]\+|\d\+|' |
||||
sy match CtrlPBufName '|\d\+:\zs[^|]\+\ze|\d\+|' |
||||
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName,CtrlPTagKind |
||||
en |
||||
endf |
||||
" Public {{{1 |
||||
fu! ctrlp#buffertag#init(fname) |
||||
let bufs = exists('s:btmode') && s:btmode |
||||
\ ? filter(ctrlp#buffers(), 'filereadable(v:val)') |
||||
\ : [exists('s:bufname') ? s:bufname : a:fname] |
||||
let lines = [] |
||||
for each in bufs |
||||
let bname = fnamemodify(each, ':p') |
||||
let tftype = get(split(getbufvar(bname, '&ft'), '\.'), 0, '') |
||||
cal extend(lines, s:process(bname, tftype)) |
||||
endfo |
||||
cal s:syntax() |
||||
retu lines |
||||
endf |
||||
|
||||
fu! ctrlp#buffertag#accept(mode, str) |
||||
let vals = matchlist(a:str, '\v^[^\t]+\t+[^\t|]+\|(\d+)\:[^\t|]+\|(\d+)\|') |
||||
let bufnr = str2nr(get(vals, 1)) |
||||
if bufnr |
||||
cal ctrlp#acceptfile(a:mode, bufname(bufnr), get(vals, 2)) |
||||
en |
||||
endf |
||||
|
||||
fu! ctrlp#buffertag#cmd(mode, ...) |
||||
let s:btmode = a:mode |
||||
if a:0 && !empty(a:1) |
||||
let s:bufname = fnamemodify(a:1, ':p') |
||||
en |
||||
retu s:id |
||||
endf |
||||
|
||||
fu! ctrlp#buffertag#exit() |
||||
unl! s:btmode s:bufname |
||||
endf |
||||
"}}} |
||||
|
||||
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |
@ -0,0 +1,95 @@ |
||||
" ============================================================================= |
||||
" File: autoload/ctrlp/changes.vim |
||||
" Description: Change list extension |
||||
" Author: Kien Nguyen <github.com/kien> |
||||
" ============================================================================= |
||||
|
||||
" Init {{{1 |
||||
if exists('g:loaded_ctrlp_changes') && g:loaded_ctrlp_changes |
||||
fini |
||||
en |
||||
let g:loaded_ctrlp_changes = 1 |
||||
|
||||
cal add(g:ctrlp_ext_vars, { |
||||
\ 'init': 'ctrlp#changes#init(s:bufnr, s:crbufnr)', |
||||
\ 'accept': 'ctrlp#changes#accept', |
||||
\ 'lname': 'changes', |
||||
\ 'sname': 'chs', |
||||
\ 'exit': 'ctrlp#changes#exit()', |
||||
\ 'type': 'tabe', |
||||
\ 'sort': 0, |
||||
\ 'nolim': 1, |
||||
\ }) |
||||
|
||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) |
||||
" Utilities {{{1 |
||||
fu! s:changelist(bufnr) |
||||
sil! exe 'noa hid b' a:bufnr |
||||
redi => result |
||||
sil! changes |
||||
redi END |
||||
retu map(split(result, "\n")[1:], 'tr(v:val, " ", " ")') |
||||
endf |
||||
|
||||
fu! s:process(clines, ...) |
||||
let [clines, evas] = [[], []] |
||||
for each in a:clines |
||||
let parts = matchlist(each, '\v^.\s*\d+\s+(\d+)\s+(\d+)\s(.*)$') |
||||
if !empty(parts) |
||||
if parts[3] == '' | let parts[3] = ' ' | en |
||||
cal add(clines, parts[3].' |'.a:1.':'.a:2.'|'.parts[1].':'.parts[2].'|') |
||||
en |
||||
endfo |
||||
retu reverse(filter(clines, 'count(clines, v:val) == 1')) |
||||
endf |
||||
|
||||
fu! s:syntax() |
||||
if !ctrlp#nosy() |
||||
cal ctrlp#hicheck('CtrlPBufName', 'Directory') |
||||
cal ctrlp#hicheck('CtrlPTabExtra', 'Comment') |
||||
sy match CtrlPBufName '\t|\d\+:\zs[^|]\+\ze|\d\+:\d\+|$' |
||||
sy match CtrlPTabExtra '\zs\t.*\ze$' contains=CtrlPBufName |
||||
en |
||||
endf |
||||
" Public {{{1 |
||||
fu! ctrlp#changes#init(original_bufnr, bufnr) |
||||
let bufnr = exists('s:bufnr') ? s:bufnr : a:bufnr |
||||
let bufs = exists('s:clmode') && s:clmode ? ctrlp#buffers('id') : [bufnr] |
||||
cal filter(bufs, 'v:val > 0') |
||||
let [swb, &swb] = [&swb, ''] |
||||
let lines = [] |
||||
for each in bufs |
||||
let fnamet = fnamemodify(bufname(each), ':t') |
||||
cal extend(lines, s:process(s:changelist(each), each, fnamet)) |
||||
endfo |
||||
sil! exe 'noa hid b' a:original_bufnr |
||||
let &swb = swb |
||||
cal ctrlp#syntax() |
||||
cal s:syntax() |
||||
retu lines |
||||
endf |
||||
|
||||
fu! ctrlp#changes#accept(mode, str) |
||||
let info = matchlist(a:str, '\t|\(\d\+\):[^|]\+|\(\d\+\):\(\d\+\)|$') |
||||
let bufnr = str2nr(get(info, 1)) |
||||
if bufnr |
||||
cal ctrlp#acceptfile(a:mode, bufname(bufnr)) |
||||
cal cursor(get(info, 2), get(info, 3)) |
||||
sil! norm! zvzz |
||||
en |
||||
endf |
||||
|
||||
fu! ctrlp#changes#cmd(mode, ...) |
||||
let s:clmode = a:mode |
||||
if a:0 && !empty(a:1) |
||||
let s:bufnr = bufnr('^'.fnamemodify(a:1, ':p').'$') |
||||
en |
||||
retu s:id |
||||
endf |
||||
|
||||
fu! ctrlp#changes#exit() |
||||
unl! s:clmode s:bufnr |
||||
endf |
||||
"}}} |
||||
|
||||
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |
@ -0,0 +1,92 @@ |
||||
" ============================================================================= |
||||
" File: autoload/ctrlp/dir.vim |
||||
" Description: Directory extension |
||||
" Author: Kien Nguyen <github.com/kien> |
||||
" ============================================================================= |
||||
|
||||
" Init {{{1 |
||||
if exists('g:loaded_ctrlp_dir') && g:loaded_ctrlp_dir |
||||
fini |
||||
en |
||||
let [g:loaded_ctrlp_dir, g:ctrlp_newdir] = [1, 0] |
||||
|
||||
let s:ars = ['s:maxdepth', 's:maxfiles', 's:compare_lim', 's:glob', 's:caching'] |
||||
|
||||
cal add(g:ctrlp_ext_vars, { |
||||
\ 'init': 'ctrlp#dir#init('.join(s:ars, ', ').')', |
||||
\ 'accept': 'ctrlp#dir#accept', |
||||
\ 'lname': 'dirs', |
||||
\ 'sname': 'dir', |
||||
\ 'type': 'path', |
||||
\ 'specinput': 1, |
||||
\ }) |
||||
|
||||
let s:id = g:ctrlp_builtins + len(g:ctrlp_ext_vars) |
||||
|
||||
let s:dircounts = {} |
||||
" Utilities {{{1 |
||||
fu! s:globdirs(dirs, depth) |
||||
let entries = split(globpath(a:dirs, s:glob), "\n") |
||||
let [dirs, depth] = [ctrlp#dirnfile(entries)[0], a:depth + 1] |
||||
cal extend(g:ctrlp_alldirs, dirs) |
||||
let nr = len(g:ctrlp_alldirs) |
||||
if !empty(dirs) && !s:max(nr, s:maxfiles) && depth <= s:maxdepth |
||||
sil! cal ctrlp#progress(nr) |
||||
cal s:globdirs(join(dirs, ','), depth) |
||||
en |
||||
endf |
||||
|
||||
fu! s:max(len, max) |
||||
retu a:max && a:len > a:max ? 1 : 0 |
||||
endf |
||||
|
||||
fu! s:nocache() |
||||
retu !s:caching || ( s:caching > 1 && get(s:dircounts, s:cwd) < s:caching ) |
||||
endf |
||||
" Public {{{1 |
||||
fu! ctrlp#dir#init(...) |
||||
let s:cwd = getcwd() |
||||
for each in range(len(s:ars)) |
||||
let {s:ars[each]} = a:{each + 1} |
||||
endfo |
||||
let cadir = ctrlp#utils#cachedir().ctrlp#utils#lash().'dir' |
||||
let cafile = cadir.ctrlp#utils#lash().ctrlp#utils#cachefile('dir') |
||||
if g:ctrlp_newdir || s:nocache() || !filereadable(cafile) |
||||
let [s:initcwd, g:ctrlp_alldirs] = [s:cwd, []] |
||||
cal s:globdirs(s:cwd, 0) |
||||
cal ctrlp#rmbasedir(g:ctrlp_alldirs) |
||||
if len(g:ctrlp_alldirs) <= s:compare_lim |
||||
cal sort(g:ctrlp_alldirs, 'ctrlp#complen') |
||||
en |
||||
cal ctrlp#utils#writecache(g:ctrlp_alldirs, cadir, cafile) |
||||
let g:ctrlp_newdir = 0 |
||||
el |
||||
if !( exists('s:initcwd') && s:initcwd == s:cwd ) |
||||
let s:initcwd = s:cwd |
||||
let g:ctrlp_alldirs = ctrlp#utils#readfile(cafile) |
||||
en |
||||
en |
||||
cal extend(s:dircounts, { s:cwd : len(g:ctrlp_alldirs) }) |
||||
retu g:ctrlp_alldirs |
||||
endf |
||||
|
||||
fu! ctrlp#dir#accept(mode, str) |
||||
let path = a:mode == 'h' ? getcwd() : s:cwd.ctrlp#utils#lash().a:str |
||||
if a:mode =~ 't\|v\|h' |
||||
cal ctrlp#exit() |
||||
en |
||||
cal ctrlp#setdir(path, a:mode =~ 't\|h' ? 'chd!' : 'lc!') |
||||
if a:mode == 'e' |
||||
sil! cal ctrlp#statusline() |
||||
cal ctrlp#setlines(s:id) |
||||
cal ctrlp#recordhist() |
||||
cal ctrlp#prtclear() |
||||
en |
||||
endf |
||||
|
||||
fu! ctrlp#dir#id() |
||||
retu s:id |
||||
endf |
||||
"}}} |
||||
|
||||
" vim:fen:fdm=marker:fmr={{{,}}}:fdl=0:fdc=1:ts=2:sw=2:sts=2 |
@ -0,0 +1,62 @@ |
||||
" ============================================================================= |
||||
" File: autoload/ctrlp/line.vim |
||||
" Description: Line extension |
||||
" Author: Kien Nguyen <github.com/kien> |
||||
" ============================================================================= |
||||
|
||||
" Init {{{1 |
||||
if exists('g:loaded_ctrlp_line') && g:loaded_ctrlp_line |
||||
fini |
||||
en |
||||
let g:loaded_ctrlp_line = 1 |
||||
|
||||
cal add(g:ctrlp_ext_vars, { |
||||