| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- *dirvish.txt* directory viewer
- ==============================================================================
- OVERVIEW *dirvish*
- Dirvish is a minimalist directory viewer. It basically dumps a list of paths
- into a Vim buffer and provides some sugar to work with those paths. It works
- with built-in Vim mechanisms instead of inventing peripheral imitations.
- Because each Dirvish buffer-name is the literal directory path, you can |:cd|
- to the directory, >
- :cd %
- create a new file, >
- :edit %foo.txt
- |expand()| the directory path, >
- :let &titlestring = expand('%', 1)
- and use complementary plugin commands like |]f|/|[f| (unimpaired.vim).
- Because each dirvish buffer is just a list of paths, you can use normal Vim
- commands to |y|ank, |:read|, |gf|, etc. The built-in CTRL-W mappings also work
- as expected.
- It's totally fine to slice, dice, and smash any Dirvish buffer: it will never
- modify the filesystem. If you edit the buffer, Dirvish automatically disables
- |conceal| so you can see the full text.
- Dirvish is designed to work with built-in Vim concepts where possible. Tim
- Pope's plugins demonstrate this theme; more plugins should too. Re-use of
- concepts multiplies the utility of those concepts; conversely if a plugin does
- not reuse a concept, both that concept and the new one are made mutually less
- valuable--the sum is less than the parts--because the user must learn or
- choose from two slightly different things instead of one augmented system.
- ==============================================================================
- MAPPINGS *dirvish-mappings*
- Global ~
- <Plug>(dirvish_up)
- - Opens the [count]th parent directory of the current file.
- <Plug>(dirvish_split_up)
- Opens the [count]th parent in a new window.
- <Plug>(dirvish_vsplit_up)
- Opens the [count]th parent in a new, vertical window.
- Buffer-local (filetype=dirvish) ~
- g? Shows this help.
- [count]R Reloads the current directory. (|:edit| works too.)
- Sets |g:dirvish_mode| to [count], if given.
- Mnemonic: higher [count] => more files.
- <Plug>(dirvish_quit)
- q Quits and returns to the original file.
- gq Alias to "q". May be removed in the future.
- <2-LeftMouse>
- i
- <CR> Opens file at cursor.
- {Visual}I
- {Visual}<CR> Opens selected files.
- o Opens file in a new window.
- {Visual}O Opens each selected file in a new window.
- a Opens file in a new, vertical window.
- {Visual}A Opens each selected file in a new, vertical window.
- K Shows file info. [count] shows directory size.
- {Visual}K Shows info for selected files. [count] shows directory size.
- p Previews file at cursor.
- CTRL-N Previews the next file.
- CTRL-P Previews the previous file.
- <Plug>(dirvish_arg)
- x Adds/removes file to/from the local |arglist|.
- {Visual}x Adds selected files to the local arglist.
- dax Starts a new empty local arglist.
- . Inserts ":! {path}" into the command-line.
- {Visual}. Inserts "|:Shdo| {}" into the command-line.
- [count]. Inserts "|:Shdo|! {}" into the command-line.
- ~ Opens your home directory.
- cd Sets the local |current-directory|. |:lcd|
- [count]cd Sets the global |current-directory|. |:cd|
- Buffer-local (:Shdo) ~
- *Z!* *dirvish-Z!*
- Z! Saves and executes a |:Shdo| shell-script. Closes the
- window if the script succeeded.
- ==============================================================================
- COMMANDS *dirvish-commands*
- :Dirvish [path] *dirvish-:Dirvish*
- Opens the directory at [path], or its parent if [path] is a file, or the
- parent of the current file if [path] is not given.
- :[range]Shdo[!] {cmd} *:Shdo* *dirvish-:Shdo*
- Generates a shell script with {cmd} applied to [range] and the respective
- filepath inserted wherever {} appears in {cmd}. The window-local directory
- is initialized to the current Dirvish directory. If bang ! is given the
- |arglist| is used instead of [range].
- For example, to rename a list of visual-selected files: >
- :'<,'>Shdo mv {} {}-copy.txt
- < Run the script with |Z!| or ":!%".
- ==============================================================================
- FUNCTIONS *dirvish-functions*
- *dirvish#open()*
- [range]dirvish#open({cmd}, {bg})
- Performs {cmd} ("edit", "vsplit", "split", "tabedit") on the files in
- [range]. {bg} must be 0 (opens in current window) or 1 (opens in the
- "background").
- *dirvish#add_icon_fn()*
- dirvish#add_icon_fn(fn)
- Registers a function {fn} to decide the "icon" for each path in a Dirvish
- buffer. Returns id for use with |dirvish#remove_icon_fn()|. If multiple
- functions are registered: the first function to return non-whitespace for
- a given path, wins. Best practice: if you don't have anything meaningful
- to show for a given path, return empty string (or whitespace).
- {fn} is any |Funcref| that takes a path (string) and returns a single
- character (the "icon"). Example: >
- call dirvish#add_icon_fn({p -> p[-1:]=='/'?'📂':'📄'})
- <
- *dirvish#remove_icon_fn()*
- dirvish#remove_icon_fn(fn_id)
- Unregisters the function associated with {fn_id} returned from
- |dirvish#add_icon_fn()|.
- ==============================================================================
- OPTIONS *dirvish-options*
- g:dirvish_mode = 1 *g:dirvish_mode*
- Controls which files are listed and how they are presented.
- 1: 'suffixes' and 'wildignore' determine sorting and visibility.
- 2: Shows all files, in the order returned by |glob()|.
- ":{cmd}": Ex-command |:execute|d after listing files.
- Mnemonic: higher number => more files.
- g:dirvish_relative_paths = 0 *g:dirvish_relative_paths*
- 0: List full (absolute) paths in the Dirvish buffer.
- 1: List paths relative to the |current-directory|.
- (Recommended for Vim 7.3 because it lacks |conceal|).
- |BufNew| fires the first time a directory is opened (and not yet loaded).
- Note: Use expand("<afile>") to get the new buffer name (not "%").
- |FileType| fires after Dirvish has loaded: all mappings, options, and content
- can be overridden by handling that event. Example: >
- augroup dirvish_config
- autocmd!
- " Map `t` to open in new tab.
- autocmd FileType dirvish
- \ nnoremap <silent><buffer> t :call dirvish#open('tabedit', 0)<CR>
- \ |xnoremap <silent><buffer> t :call dirvish#open('tabedit', 0)<CR>
- " Map `gr` to reload.
- autocmd FileType dirvish nnoremap <silent><buffer>
- \ gr :<C-U>Dirvish<CR>
- " Map `gh` to hide dot-prefixed files. Press `R` to "toggle" (reload).
- autocmd FileType dirvish nnoremap <silent><buffer>
- \ gh :silent keeppatterns g@\v/\.[^\/]+/?$@d _<cr>:setl cole=3<cr>
- augroup END
- <
- ==============================================================================
- FAQ *dirvish-faq*
- How do I control where Dirvish opens split windows? ~
- Set the Vim options 'splitbelow' and 'splitright'.
- How do I group (sort) directories/folders? ~
- Sort folders at the top: >
- :sort ,^.*[\/],
- Sort folders at the bottom: >
- :sort ,^.*[^\/],
- To make this automatic, set |g:dirvish_mode|: >
- let g:dirvish_mode = ':sort ,^.*[\/],'
- If you use |g:dirvish_relative_paths|, try this: >
- let g:dirvish_mode = ':sort ,^\v(.*[\/])|\ze,'
- How do I filter? ~
- Use |:global| to delete lines matching any filter: >
- :g/foo/d
- To make this automatic, set |g:dirvish_mode|: >
- let g:dirvish_mode = ':silent keeppatterns g/foo/d _'
- How do I hide "hidden" (dot-prefixed) files? ~
- Use |:global| to delete the paths with dot-prefixed files: >
- :g@\v/\.[^\/]+/?$@d
- To "toggle", just reload.
- To make this automatic, set |g:dirvish_mode|: >
- let g:dirvish_mode = ':silent keeppatterns g@\v/\.[^\/]+/?$@d _'
- You could also use a FileType autocmd: >
- autocmd FileType dirvish silent keeppatterns g@\v/\.[^\/]+/?$@d _
- To un-hide, just undo. To hide again, reload.
- How do I disable a Dirvish mapping? ~
- As noted in |dirvish-options|, the way to customize Dirvish is to handle its
- FileType event. For example if you have a global <C-p> mapping and you don't
- want Dirvish to "shadow" it, :unmap the Dirvish buffer-local mapping: >
- augroup dirvish_config
- autocmd!
- autocmd FileType dirvish silent! unmap <buffer> <C-p>
- augroup END
- You could use ":mapclear <buffer>" to delete ALL of the mappings.
- Why does the "swap file" dialog appear if another Vim is viewing the same ~
- directory? ~
- To avoid this, |:noswapfile| is required (Vim 7.4.213).
- https://github.com/vim/vim/tree/v7.4.213
- How can I delete files, rename files, or perform other commands?~
- Since ":'<,'>call delete(getline('.'))" is a bit much to type, Dirvish
- provides the ":Shdo" command. |dirvish-:Shdo|
- Just for fun, here's the old-school way: >
- qqq
- :g/^/let @Q='echo '.shellescape(getline('.')).' '.shellescape(getline('.'))."\n"
- :exe 'e' tempname().'.sh'
- :put q|w|!%
- <
- Why does Dirvish report "invalid directory" for a path that contains unusual ~
- characters (e.g. brackets "[]")? ~
- Check your 'isfname' setting. On Windows (where filepaths may contain
- backslashes "\") |fnamemodify()| may produce nonsense if 'isfname' does not
- contain the aforementioned unusual characters.
- How to override the netrw :Explore, :Sexplore, :Vexplore commands? ~
- Put this in your vimrc: >
- let g:loaded_netrwPlugin = 1
- command! -nargs=? -complete=dir Explore Dirvish <args>
- command! -nargs=? -complete=dir Sexplore belowright split | silent Dirvish <args>
- command! -nargs=? -complete=dir Vexplore leftabove vsplit | silent Dirvish <args>
- How to expand a directory inline (like a tree-style view)? ~
- There is a hacky solution. Put this in your vimrc and hit "t" on a directory: >
- augroup dirvish_config
- autocmd!
- autocmd FileType dirvish
- \ nnoremap <buffer> t o<Esc>:r !find '<C-R>=substitute(getline(line(".")-1),"\\n","","g")<CR>' -maxdepth 1 -print0 \| xargs -0 ls -Fd<CR>:silent! keeppatterns %s/\/\//\//g<CR>:silent! keeppatterns %s/[^a-zA-Z0-9\/]$//g<CR>:silent! keeppatterns g/^$/d _<CR>"_dd
- augroup END
- Note:
- - Assumes unix-style "/" path separators.
- ==============================================================================
- vim:tw=78:ts=4:et:ft=help:norl:
|