This commit is contained in:
josh committed 2013-11-11 10:19:38 -05:00
1 parent 3326c15cee
commit a848fd42e6
6 files changed
+1040

No files matched your search

+138
View File
@@ -0,0 +1,138 @@
*qnamebuf.txt* QuickNameBuf: A quick buffer manager
Author: Matt Spear <batman900 at gmail DOT com>
QuickNameBuf version 0.06
==============================================================================
1. Overview~
*qnamebuf-overview*
I really like qname (vimscript #2317) and qbuf (vimscript #1910) and
decided that it would be nice to combine them. The author recommended I
upload under my name.
==============================================================================
2. Installation ~
*qnamebuf-installation*
Extract the downloaded file in your personal |vimfiles| directory (~/.vim
under Unix or %HOMEPATH%\vimfiles under Windows). Restart Vim and execute:
>
helptags ~/.vim/doc
<
==============================================================================
2. Usage ~
*qnamebuf-usage*
<F4> opens a list of the current buffers, and typing a string filters
the list (by default ala lustyexplorer vimscript #1890). All filtering
is case insensitive (even if using Regular Expressions). If there
are many files open goes to a simplified view (just relative buffer
number, and the filename with path), when filtered enough shows more
information:
1) Relative Buffer Number
2) Current Buffer (%), Alternative Buffer (#), or if it is open in a visible split (=)
3) File name
4) Buffer number
5) Relative file path
Beyond the keybindinfs of |qnamepicker.txt| qnamefile provides:
<M-L> Toggle between listed and unlisted buffers
<M-D> Delete the selected buffer, the explorer stays open and
retains cursor position
<M-C> Close the window containing the buffer
<ESC> or <F4> or <C-G> Close the buffer explorer
<M-S> Open the selected file in a split window
<M-V> Open the selected file in a vert split window
<M-T> Open the selected file in a new tab
==============================================================================
3. Customization ~
*qnamebuf-customization*
|g:qnamebuf_hotkey| Set the default key to toggle qnamebuf (defaults to <F4>).
>
nmap <KEY> :call QNameBufInit(REGEXP, [SIZE], [FILE_NAME_ONLY], [ALLOW_LEADER])<cr>:~
<
If REGEXP is true use regular expressions instead of the lusty filter.
SIZE controls the size of the popup. Defaults to 1/2 of the visible lines
(|&lines|/2).
If FILE_NAME_ONLY is false then use the path and filename otherwise just use
the filename. Defaults to true.
If ALLOW_LEADER is true then <LEADER>X can be used instead of <M-X> in the
list above. Defaults to false.
|g:qnamebuf_unlisted| If set will start in unlisted mode instead of the
default (listed mode).
==============================================================================
4. Hints ~
*qnamebuf-hints*
I find the following mappings very useful (jump to the ith file):
nmap <silent> <M-1> :brewind<CR>
nmap <silent> <M-2> :brewind \| 1bn<CR>
nmap <silent> <M-3> :brewind \| 2bn<CR>
nmap <silent> <M-4> :brewind \| 3bn<CR>
nmap <silent> <M-5> :brewind \| 4bn<CR>
nmap <silent> <M-6> :brewind \| 5bn<CR>
nmap <silent> <M-7> :brewind \| 6bn<CR>
nmap <silent> <M-8> :brewind \| 7bn<CR>
nmap <silent> <M-9> :brewind \| 8bn<CR>
nmap <silent> <M-0> :brewind \| 9bn<CR>
When starting qnamebuf the relative numbers are displayed and this allows
consistent access.
==============================================================================
6. History~
*qnamebuf-history*
Version 0.07
- Refactored to have a generic core and many wrappers
- Increased speed by changing from a custom function for matching to a
regular expression (achieves the same result, but is significantly
faster)
Version 0.06
- Fixed a bug when switching between listed and unlisted
Version 0.05
- Fixed a bug which would cause operations to fail when filtered
Version 0.04
- Save and restore register |@y| instead of overwriting it
- Made the |cmap|s <silent>
Version 0.03
- Mistake in always defining the <F4> mapping even if a map to QNameInit exists
Version 0.02
- Added support for <Leader>X as a synonym for <M-X> for |guioptions|+=m users
- Some minor code cleanup
Version 0.01
- Initial release
==============================================================================
7. Thanks~
*qnamebuf-thanks*
- Vim Devs for vim
- Stefano for finding that <M-X> doesn't work with the menu shown and an
initial documentation
- Peter for a patch for fixing |@y| being overwritten and pointing out the cmap
noisiness
- pal nart For the amazing qname and qbuf which were the inspiration and basis
for this
==============================================================================
8. Contact ~
*qnamebuf-contact*
If you have questions, bug reports, suggestions, etc. the author can be
contacted at batman900 AT gmail DOT com. The latest version is available at
http://www.vim.org/scripts/script.php?script_id=3217. If you like the script
please vote for it on www.vim.org.
==============================================================================
License ~
This software is licensed under the MIT license.
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
+98
View File
@@ -0,0 +1,98 @@
*qnamefile.txt* QuickNameBuf: A quick buffer manager
Author: Matt Spear <batman900 at gmail DOT com>
QNameFile version 0.07
==============================================================================
1. Overview~
*qnamefile-overview*
After using qnamebuf for a while I noticed I wanted to be able to choose a
file in a similar manner (by typing a non-). After a refactoring of the
qnamebuf code into a core module |qnamepicker| and modules, this became
possible.
==============================================================================
2. Installation ~
*qnamefile-installation*
Extract the downloaded file in your personal |vimfiles| directory (~/.vim
under Unix or %HOMEPATH%\vimfiles under Windows). Restart Vim and execute:
>
helptags ~/.vim/doc
<
Requires that there be a find utility available in the path. This should be
available on unix, on Windows GnuWin32 should be sufficient:
http://gnuwin32.sourceforge.net/packages/findutils.htm
==============================================================================
2. Usage ~
*qnamefile-usage*
<S-F4> opens a listing of the files recursively from the current directory.
By default the only files that are not shown are those that are hidden, or are
in a hidden directory (e.g. .vimrc and anything in .vim/). Typing a string
filters the list (by default using an algorithm like lustyexplorer vimscript
#1890). All filtering is case insensitive.
Beyond the keybindinfs of |qnamepicker.txt| qnamefile provides:
<M-V> Opens the selected file in a vertical split
<M-S> Opens the selected file in a split
<M-T> Opens the selected file in a new tab
<C-G> Cancels
<S-F4> Cancels
==============================================================================
3. Customization ~
*qnamefile-customization*
|g:qnamefile_hotkey| Set the default key to toggle qnamefile (defaults to <S-F4>).
One can create a mapping using something like:
>
nmap <unique> <KEY> :call QNameFileInit(PATH, EXTENSIONS,
INCLUDE_HIDDEN)<cr>:~
<
PATH specifies the path to start from, if it is |''| then it will default to
the current working directory (see |:pwd|).
EXTENSIONS is a space separated list of extensions to filter on (e.g. "h cpp
cc cxx c"), if it is |''| then there will be no filtering.
INCLUDE_HIDDEN if true will recurse into hidden directories, and show hidden
files (i.e. files starting with .).
|g:qnamefile_height| Controls the initial height of the window.
|g:qnamefile_leader| If true then will allow <LEADER><KEY> instead of <M-KEY>
in the mappings.
|g:qnamefile_regexp| If true will use regular expressions instead of a lusty
style selector.
==============================================================================
6. History~
*qnamefile-history*
Version 0.07
- Initial release
==============================================================================
7. Thanks~
*qnamefile-thanks*
- Vim Devs for vim
==============================================================================
8. Contact ~
*qnamefile-contact*
If you have questions, bug reports, suggestions, etc. the author can be
contacted at batman900 AT gmail DOT com. The latest version is available at
http://www.vim.org/scripts/script.php?script_id=3217. If you like the script
please vote for it on www.vim.org.
==============================================================================
License ~
This software is licensed under the MIT license.
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
+210
View File
@@ -0,0 +1,210 @@
*qnamepicker.txt* QuickNamePicker: A quick list selector library
Author: Matt Spear <batman900 at gmail DOT com>
QNamePicker version 0.07
==============================================================================
1. Overview~
*qnamepicker-overview*
After using qnamebuf for a while I realized it would be useful to have a
generic selector interface and to allow modules to build off this. In this
manner qnamebuf becomes an extension (and I introduced qnamefile). The big
driver for this was the Project plugin (vimscript #69) which I felt very much
needed a lusty picker for the file to open.
==============================================================================
2. Installation ~
*qnamepicker-installation*
Extract the downloaded file in your personal |vimfiles| directory (~/.vim
under Unix or %HOMEPATH%\vimfiles under Windows). Restart Vim and execute:
>
helptags ~/.vim/doc
<
==============================================================================
2. Usage ~
*qnamepicker-usage*
This exposes one function for the user:
>
QNamePickerStart(list, dict)
<
|a:list| is the |List| of items to have the user choose from.
|a:dict| has the optional keys:
|acceptors| The set of additional keys to accept on.
By default has [<Enter>, <M-1>, ..., <M-0>].
e.g. "acceptors": ["\<M-D>", "\<C-T>", "\<M-L>"].
|cancelors| The set of keys to close the qnamepicker.
By default has <Esc>.
e.g. "cancelors": ["\<C-G>", "\<C-C>"]
|modifiers| The set of keys to call the modifier_func when pressed.
By default is empty.
e.g. "modifiers": ["\<M-L>"]
|modifier_func| The callback function to modify the list that is
displayed. The callback is expected to return the new list to
display. Called as:
modifier_func(|index|, |modifier_key|)
where
|a:index| is the index in |a:list| that is selected, if there is
no selected item then it will be -1 (this will happen if there are
no items in the filtered list).
|modifier_key| is the key that was pressed.
|render_func| The function to call to render each item. The callback is
expected to return a string that represents what to show for each item
in the filtered |a:list|. Called as:
render_func(|index|, |rel_index|, |length|, |in_column_mode|)
where
|a:index| is the index in |a:list| of the item to render.
|a:rel_index| is the relative index in the filtered list (so that
one can show the shortcut counts for the <M-1>... keys).
|a:length| is the number of items in the filtered list (so that
one can show more information if there are few enough items).
|a:in_column_mode| is true if there are more items than the size
of the window.
|complete_func| The function to call when an item is selected by one of
the |acceptors|. Called as:
complete_func(|index|, |acceptor_key|)
where
|a:index| is the index in |a:index| of the selected item.
|a:acceptor_key| is the acceptor key that was pressed.
|regexp| If true then treats the user input as a regular expression. If
false or not present, then will use a lusty-style selector.
|height| The height of the window. If set to 0 or not present, will
default to one-half of |&lines|.
|use_leader| If true then any word characters ([a-zA-Z0-9]) in acceptors
or cancelors or modifiers will be accessable via <Leader><CHAR>. When
false then any word characters are treated as user input (including
<Leader>).
The default controls are:
<BS> Delete last char entered
<C-U> Delete all entered chars
<ESC> Close the explorer
<CR> Choose the currently selected file
<UP> <DOWN> <LEFT> <RIGHT> Navigate the selection
<HOME> <END> Move to the first/last item
<M-1>, ..., <M-0> Open the first, ..., tenth file in the list
Note, I wanted these to be <C-...> but <C-1>...<C-0> are not real key sequences.
Once a function has been written to use |QNamePickerInit| (say |MyQNameWrapper|), then one should add
a mapping to call the wrapper via:
>
nmap <unique> <KEY> :call MyQNameWrapper()<cr>:~
<
==============================================================================
3. Customization ~
*qnamepicker-customization*
Every other line can be colored by highlighting |QNamePickerAlt|, e.g.
>
hi QNamePickerAlt gui=NONE guibg=#222222
<
==============================================================================
4. Example ~
*qnamepicker-example*
Included in this are two fairly comprehensive examples:
|qnamebuf| which shows how I used this core to interact with the set of
vim buffers. This is very comprehensive and uses pretty much every
feature of |qnamepicker|.
|qnamefile| which shows the recursive set of files from a given path, and
restricting to a set of extensions. This is a much simpler example,
only requiring a |complete_func| and custom |acceptors|/|cancelors| list.
These (and the hint example below) should be sufficient to make use of the
plugin.
==============================================================================
5. Hints ~
*qnamepicker-hints*
To plug this into the Project (vimscript #69) plugin one would add something
like:
>
function! LustyProjectFilePicker()
let s:sid = substitute(maparg('<Return>', 'n'), '.*\(<SNR>.\{-}\)_.*', '\1', '')
" As there may not have been a file opened in the project, if a CD is
" specified, then we should cd to it before showing the list so that
" the :. works as expected...all of this is to get to that
let cd_cmd = b:proj_cd_cmd
let infoline = {s:sid}_RecursivelyConstructDirectives(line('.'))
let home = {s:sid}_GetHome(infoline, '') . '/'
let c_d = {s:sid}_GetCd(infoline, home)
let abs = {s:sid}_IsAbsolutePath(home)
if c_d != '' && abs != 2
if match(g:proj_flags, '\CL') != -1
call {s:sid}_SetupAutoCommand(c_d)
endif
if !isdirectory(glob(c_d))
call confirm("From this fold's entry,\nCD=".'"'.c_d.'" is not a valid directory.', "&OK", 1)
else
silent exec cd_cmd.' '.c_d
endif
endif
let ofnames=split(Project_GetAllFnames(1, line("."), ",,"), ',,')
let g:cmd_arr = map(ofnames, "fnamemodify(v:val, ':.')")
call QNamePickerStart(g:cmd_arr, {
\ "complete_func": function("LustyProjectFileCompletion"),
\ "acceptors": ["v", "s", "t", "\<M-V>", "\<M-S>", "\<M-T>"],
\ "use_leader": 1,
\})
endfunction
function! LustyProjectFileCompletion(index, key)
let infoline = {s:sid}_RecursivelyConstructDirectives(line('.'))
if a:key == "\<M-V>" || a:key == "v"
call {s:sid}_OpenEntry2(line('.'), infoline, fnamemodify(g:cmd_arr[a:index], ':p'), 'vert sp')
elseif a:key == "\<M-S>" || a:key == "s"
call {s:sid}_OpenEntry2(line('.'), infoline, fnamemodify(g:cmd_arr[a:index], ':p'), 'sp')
elseif a:key == "\<M-T>" || a:key == "t"
call {s:sid}_OpenEntry2(line('.'), infoline, fnamemodify(g:cmd_arr[a:index], ':p'), 'tabe')
else
call {s:sid}_OpenEntry2(line('.'), infoline, fnamemodify(g:cmd_arr[a:index], ':p'), 'e')
endif
endfunction
nmap <buffer> <unique> <LocalLeader>a :call LustyProjectFilePicker()<cr>:~
<
to the .vimproject_mappings file.
With this <M-V> will open the selected file in a vert split window, <M-S> will
open it in a split window, <M-T> will open it in a new tab, and <CR> will open
it in the last accessed window (this is accomplished by cheating and calling
the |QNameFileCompletion| which is publically exposed from the |qnamefile|
plugin).
==============================================================================
7. History~
*qnamepicker-history*
Version 0.07
- Initial release
==============================================================================
8. Thanks~
*qnamepicker-thanks*
- Vim Devs for vim
- Stefano for finding that <M-X> doesn't work with the menu shown and an
initial documentation
- Peter for a patch for fixing |@y| being overwritten and pointing out the cmap
noisiness
- pal nart For the amazing qname and qbuf which were the inspiration and basis
for this
==============================================================================
9. Contact ~
*qnamepicker-contact*
If you have questions, bug reports, suggestions, etc. the author can be
contacted at batman900 AT gmail DOT com. The latest version is available at
http://www.vim.org/scripts/script.php?script_id=3217. If you like the script
please vote for it on www.vim.org.
==============================================================================
License ~
This software is licensed under the MIT license.
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl: