Update 2024-01-18 21:23 OpenBSD/amd64-x13

This commit is contained in:
c0dev0id 2024-01-18 21:23:17 +01:00
parent 1195424d1b
commit 139dcd3498
18 changed files with 4701 additions and 245 deletions

View File

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2016 Romain Lafourcade
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,64 @@
# vim-cool
Vim-cool disables search highlighting when you are done searching and re-enables it when you search again. That's it. No more `:noh<CR>`, no more `/sytdstdrsid<CR>`, and no more dodgy `<C-l>` mappings.
Vim-cool is cool.
Vim-cool is *experimental*.
![cool](https://user-images.githubusercontent.com/344335/226825463-4ff5e352-ac2e-4f4d-94c7-a8109da7b6db.gif)
## Requirements
Vim-cool is intended to be used with Vim, **and only Vim**, 7.4.2008 or later. It may or may not work in other editors but they are not and will not be officially supported.
## Installation
Follow your favorite plugin/runtimepath manager's instructions.
If you choose manual installation, just put `plugin/cool.vim` where it belongs:
$HOME/.vim/plugin/cool.vim on Unix-like systems
$HOME\vimfiles\plugin\cool.vim on Windows
In Vim 8.0 and above, see `:help package`.
## Setup
The whole assumption behind Vim-cool is that the user enabled search highlighting but they don't want the highlighting to linger on when they are done searching. This implies that the user has the following line in their `vimrc`:
set hlsearch
That's it. Nothing else to do.
## Experimental features
* Show number of matches in the command-line:
let g:cool_total_matches = 1
![demo](https://user-images.githubusercontent.com/344335/226825418-12931cf3-5f89-4375-89be-c98a57e177df.png)
* Do something when we are doing `nnnNNnn`, do something else or do nothing when we are not:
set statusline+=%{get(g:,'cool_is_searching',0)?'Yep':''}
## Background
I wrote the first iteration of vim-cool in about twenty minutes, mostly to test a few ideas I had after a short discussion about `'hlsearch'` and `:nohlsearch` on #vim.
Because it relied almost exclusively on mappings, that first iteration was way too brittle to be of any use and actually messed with a bunch of my own mappings.
Then came [@purpleP](https://github.com/purpleP) and [the game-changing approach](https://github.com/romainl/vim-cool/issues/9) he put together with the help of [@chrisbra](https://github.com/chrisbra), [@justinmk](https://github.com/justinmk), [@jamessan](https://github.com/jamessan), and [@ZyX-I](https://github.com/ZyX-I).
The current version, essentially a weaponized version of @purpleP's code, doesn't rely on mappings anymore and thus should be devoid of nasty side-effects.
Many thanks to [@bounceme](https://github.com/bounceme) for his help.
## What they say about vim-cool
- **puremourning**, in #vim:
> vim-cool is by far my favourite plugin
>
> it's just so... cool.

View File

@ -0,0 +1,136 @@
" vim-cool - Disable hlsearch when you are done searching.
" Maintainer: romainl <romainlafourcade@gmail.com>
" Version: 0.0.2
" License: MIT License
" Location: plugin/cool.vim
" Website: https://github.com/romainl/vim-cool
if exists("g:loaded_cool") || v:version < 704 || &compatible
finish
endif
let g:loaded_cool = 1
let s:save_cpo = &cpo
set cpo&vim
augroup Cool
autocmd!
augroup END
if exists('##OptionSet')
if !exists('*execute')
autocmd Cool OptionSet highlight let <SID>saveh = &highlight
endif
" toggle coolness when hlsearch is toggled
autocmd Cool OptionSet hlsearch call <SID>PlayItCool(v:option_old, v:option_new)
endif
function! s:StartHL()
if !v:hlsearch || mode() isnot 'n'
return
endif
let g:cool_is_searching = 1
let [pos, rpos] = [winsaveview(), getpos('.')]
silent! exe "keepjumps go".(line2byte('.')+col('.')-(v:searchforward ? 2 : 0))
try
silent keepjumps norm! n
if getpos('.') != rpos
throw 0
endif
catch /^\%(0$\|Vim\%(\w\|:Interrupt$\)\@!\)/
call <SID>StopHL()
return
finally
call winrestview(pos)
endtry
if !get(g:,'cool_total_matches') || !exists('*reltimestr')
return
endif
exe "silent! norm! :let g:cool_char=nr2char(screenchar(screenrow(),1))\<cr>"
let cool_char = remove(g:,'cool_char')
if cool_char !~ '[/?]'
return
endif
let [f, ws, now, noOf] = [0, &wrapscan, reltime(), [0,0]]
set nowrapscan
try
while f < 2
if reltimestr(reltime(now))[:-6] =~ '[1-9]'
" time >= 100ms
return
endif
let noOf[v:searchforward ? f : !f] += 1
try
silent exe "keepjumps norm! ".(f ? 'n' : 'N')
catch /^Vim[^)]\+):E38[45]\D/
call setpos('.',rpos)
let f += 1
endtry
endwhile
finally
call winrestview(pos)
let &wrapscan = ws
endtry
redraw|echo cool_char.@/ 'match' noOf[0] 'of' noOf[0] + noOf[1] - 1
endfunction
function! s:StopHL()
if !v:hlsearch || mode() isnot 'n'
return
else
let g:cool_is_searching = 0
silent call feedkeys("\<Plug>(StopHL)", 'm')
endif
endfunction
if !exists('*execute')
let s:saveh = &highlight
" toggle highlighting, a workaround for :nohlsearch in autocmds
function! s:AuNohlsearch()
noautocmd set highlight+=l:-
autocmd Cool Insertleave *
\ noautocmd let &highlight = s:saveh | autocmd! Cool InsertLeave *
return ''
endfunction
endif
function! s:PlayItCool(old, new)
if a:old == 0 && a:new == 1
" nohls --> hls
" set up coolness
noremap <silent> <Plug>(StopHL) :<C-U>nohlsearch<cr>
if !exists('*execute')
noremap! <expr> <Plug>(StopHL) <SID>AuNohlsearch()
" If no "execute()", ":tnoremap" isn't probably implemented too.
else
noremap! <expr> <Plug>(StopHL) execute('nohlsearch')[-1]
if exists(':tnoremap')
tnoremap <expr> <Plug>(StopHL) execute('nohlsearch')[-1]
endif
endif
autocmd Cool CursorMoved * call <SID>StartHL()
autocmd Cool InsertEnter * call <SID>StopHL()
elseif a:old == 1 && a:new == 0
" hls --> nohls
" tear down coolness
nunmap <Plug>(StopHL)
unmap! <expr> <Plug>(StopHL)
if exists(':tunmap')
tunmap <Plug>(StopHL)
endif
autocmd! Cool CursorMoved
autocmd! Cool InsertEnter
else
" nohls --> nohls
" do nothing
return
endif
endfunction
" play it cool
call <SID>PlayItCool(0, &hlsearch)
let &cpo = s:save_cpo

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Junegunn Choi
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,443 @@
fzf :heart: vim
===============
Things you can do with [fzf][fzf] and Vim.
Rationale
---------
[fzf][fzf] itself is not a Vim plugin, and the official repository only
provides the [basic wrapper function][run] for Vim. It's up to the users to
write their own Vim commands with it. However, I've learned that many users of
fzf are not familiar with Vimscript and are looking for the "default"
implementation of the features they can find in the alternative Vim plugins.
Why you should use fzf on Vim
-----------------------------
Because you can and you love fzf.
fzf runs asynchronously and can be orders of magnitude faster than similar Vim
plugins. However, the benefit may not be noticeable if the size of the input
is small, which is the case for many of the commands provided here.
Nevertheless I wrote them anyway since it's really easy to implement custom
selector with fzf.
Installation
------------
fzf.vim depends on the basic Vim plugin of [the main fzf
repository][fzf-main], which means you need to **set up both "fzf" and
"fzf.vim" on Vim**. To learn more about fzf/Vim integration, see
[README-VIM][README-VIM].
[fzf-main]: https://github.com/junegunn/fzf
[README-VIM]: https://github.com/junegunn/fzf/blob/master/README-VIM.md
### Using [vim-plug](https://github.com/junegunn/vim-plug)
```vim
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
```
`fzf#install()` makes sure that you have the latest binary, but it's optional,
so you can omit it if you use a plugin manager that doesn't support hooks.
### Dependencies
- [fzf][fzf-main] 0.41.1 or above
- For syntax-highlighted preview, install [bat](https://github.com/sharkdp/bat)
- If [delta](https://github.com/dandavison/delta) is available, `GF?`,
`Commits` and `BCommits` will use it to format `git diff` output.
- `Ag` requires [The Silver Searcher (ag)][ag]
- `Rg` requires [ripgrep (rg)][rg]
- `Tags` and `Helptags` require Perl
Commands
--------
| Command | List |
| --- | --- |
| `:Files [PATH]` | Files (runs `$FZF_DEFAULT_COMMAND` if defined) |
| `:GFiles [OPTS]` | Git files (`git ls-files`) |
| `:GFiles?` | Git files (`git status`) |
| `:Buffers` | Open buffers |
| `:Colors` | Color schemes |
| `:Ag [PATTERN]` | [ag][ag] search result (`ALT-A` to select all, `ALT-D` to deselect all) |
| `:Rg [PATTERN]` | [rg][rg] search result (`ALT-A` to select all, `ALT-D` to deselect all) |
| `:RG [PATTERN]` | [rg][rg] search result; relaunch ripgrep on every keystroke |
| `:Lines [QUERY]` | Lines in loaded buffers |
| `:BLines [QUERY]` | Lines in the current buffer |
| `:Tags [QUERY]` | Tags in the project (`ctags -R`) |
| `:BTags [QUERY]` | Tags in the current buffer |
| `:Changes` | Changelist across all open buffers |
| `:Marks` | Marks |
| `:Jumps` | Jumps |
| `:Windows` | Windows |
| `:Locate PATTERN` | `locate` command output |
| `:History` | `v:oldfiles` and open buffers |
| `:History:` | Command history |
| `:History/` | Search history |
| `:Snippets` | Snippets ([UltiSnips][us]) |
| `:Commits [LOG_OPTS]` | Git commits (requires [fugitive.vim][f]) |
| `:BCommits [LOG_OPTS]` | Git commits for the current buffer; visual-select lines to track changes in the range |
| `:Commands` | Commands |
| `:Maps` | Normal mode mappings |
| `:Helptags` | Help tags <sup id="a1">[1](#helptags)</sup> |
| `:Filetypes` | File types
- Most commands support `CTRL-T` / `CTRL-X` / `CTRL-V` key
bindings to open in a new tab, a new split, or in a new vertical split
- Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen
- You can set `g:fzf_vim.command_prefix` to give the same prefix to the commands
- e.g. `let g:fzf_vim.command_prefix = 'Fzf'` and you have `FzfFiles`, etc.
(<a name="helptags">1</a>: `Helptags` will shadow the command of the same name
from [pathogen][pat]. But its functionality is still available via `call
pathogen#helptags()`. [](#a1))
[pat]: https://github.com/tpope/vim-pathogen
[f]: https://github.com/tpope/vim-fugitive
Customization
-------------
### Configuration options of the base plugin
Every command in fzf.vim internally calls `fzf#wrap` function of the main
repository which supports a set of global option variables. So please read
through [README-VIM][README-VIM] to learn more about them.
### Configuration options for fzf.vim
All configuration values for this plugin are stored in `g:fzf_vim` dictionary,
so **make sure to initialize it before assigning any configuration values to
it**.
```vim
" Initialize configuration dictionary
let g:fzf_vim = {}
```
#### Preview window
Some commands will show the preview window on the right. You can customize the
behavior with `g:fzf_vim.preview_window`. Here are some examples:
```vim
" This is the default option:
" - Preview window on the right with 50% width
" - CTRL-/ will toggle preview window.
" - Note that this array is passed as arguments to fzf#vim#with_preview function.
" - To learn more about preview window options, see `--preview-window` section of `man fzf`.
let g:fzf_vim.preview_window = ['right,50%', 'ctrl-/']
" Preview window is hidden by default. You can toggle it with ctrl-/.
" It will show on the right with 50% width, but if the width is smaller
" than 70 columns, it will show above the candidate list
let g:fzf_vim.preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/']
" Empty value to disable preview window altogether
let g:fzf_vim.preview_window = []
" fzf.vim needs bash to display the preview window.
" On Windows, fzf.vim will first see if bash is in $PATH, then if
" Git bash (C:\Program Files\Git\bin\bash.exe) is available.
" If you want it to use a different bash, set this variable.
" let g:fzf_vim = {}
" let g:fzf_vim.preview_bash = 'C:\Git\bin\bash.exe'
```
#### Command-level options
```vim
" [Buffers] Jump to the existing window if possible
let g:fzf_vim.buffers_jump = 1
" [[B]Commits] Customize the options used by 'git log':
let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'
" [Tags] Command to generate tags file
let g:fzf_vim.tags_command = 'ctags -R'
" [Commands] --expect expression for directly executing the command
let g:fzf_vim.commands_expect = 'alt-enter,ctrl-x'
```
#### List type to handle multiple selections
The following commands will fill the quickfix list when multiple entries are
selected.
* `Ag`
* `Rg` / `RG`
* `Lines` / `BLines`
* `Tags` / `BTags`
By setting `g:fzf_vim.listproc`, you can make them use location list instead.
```vim
" Default: Use quickfix list
let g:fzf_vim.listproc = { list -> fzf#vim#listproc#quickfix(list) }
" Use location list instead of quickfix list
let g:fzf_vim.listproc = { list -> fzf#vim#listproc#location(list) }
```
You can customize the list type per command by defining variables named
`g:fzf_vim.listproc_{command_name_in_lowercase}`.
```vim
" Command-wise customization
let g:fzf_vim.listproc_ag = { list -> fzf#vim#listproc#quickfix(list) }
let g:fzf_vim.listproc_rg = { list -> fzf#vim#listproc#location(list) }
```
You can further customize the behavior by providing a custom function to
process the list instead of using the predefined `fzf#vim#listproc#quickfix`
or `fzf#vim#listproc#location`.
```vim
" A customized version of fzf#vim#listproc#quickfix.
" The last two lines are commented out not to move to the first entry.
function! g:fzf_vim.listproc(list)
call setqflist(a:list)
copen
wincmd p
" cfirst
" normal! zvzz
endfunction
```
### Advanced customization
#### Vim functions
Each command in fzf.vim is backed by a Vim function. You can override
a command or define a variation of it by calling its corresponding function.
| Command | Vim function |
| --- | --- |
| `Files` | `fzf#vim#files(dir, [spec dict], [fullscreen bool])` |
| `GFiles` | `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])` |
| `GFiles?` | `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])` |
| `Buffers` | `fzf#vim#buffers([query string], [bufnrs list], [spec dict], [fullscreen bool])` |
| `Colors` | `fzf#vim#colors([spec dict], [fullscreen bool])` |
| `Rg` | `fzf#vim#grep(command, [spec dict], [fullscreen bool])` |
| `RG` | `fzf#vim#grep2(command_prefix, query, [spec dict], [fullscreen bool])` |
| ... | ... |
(We can see that the last two optional arguments of each function are
identical. They are directly passed to `fzf#wrap` function. If you haven't
read [README-VIM][README-VIM] already, please read it before proceeding.)
#### Example: Customizing `Files` command
This is the default definition of `Files` command:
```vim
command! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, <bang>0)
```
Let's say you want to a variation of it called `ProjectFiles` that only
searches inside `~/projects` directory. Then you can do it like this:
```vim
command! -bang ProjectFiles call fzf#vim#files('~/projects', <bang>0)
```
Or, if you want to override the command with different fzf options, just pass
a custom spec to the function.
```vim
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline']}, <bang>0)
```
Want a preview window?
```vim
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, <bang>0)
```
It kind of works, but you probably want a nicer previewer program than `cat`.
fzf.vim ships [a versatile preview script](bin/preview.sh) you can readily
use. It internally executes [bat](https://github.com/sharkdp/bat) for syntax
highlighting, so make sure to install it.
```vim
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, <bang>0)
```
However, it's not ideal to hard-code the path to the script which can be
different in different circumstances. So in order to make it easier to set up
the previewer, fzf.vim provides `fzf#vim#with_preview` helper function.
Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it
with additional preview options.
```vim
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), <bang>0)
```
You can just omit the spec argument if you only want the previewer.
```vim
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)
```
#### Example: `git grep` wrapper
The following example implements `GGrep` command that works similarly to
predefined `Ag` or `Rg` using `fzf#vim#grep`.
- We set the base directory to git root by setting `dir` attribute in spec
dictionary.
- [The preview script](bin/preview.sh) supports `grep` format
(`FILE_PATH:LINE_NO:...`), so we can just wrap the spec with
`fzf#vim#with_preview` as before to enable previewer.
```vim
command! -bang -nargs=* GGrep
\ call fzf#vim#grep(
\ 'git grep --line-number -- '.fzf#shellescape(<q-args>),
\ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0)
```
Mappings
--------
| Mapping | Description |
| --- | --- |
| `<plug>(fzf-maps-n)` | Normal mode mappings |
| `<plug>(fzf-maps-i)` | Insert mode mappings |
| `<plug>(fzf-maps-x)` | Visual mode mappings |
| `<plug>(fzf-maps-o)` | Operator-pending mappings |
| `<plug>(fzf-complete-word)` | `cat /usr/share/dict/words` |
| `<plug>(fzf-complete-path)` | Path completion using `find` (file + dir) |
| `<plug>(fzf-complete-file)` | File completion using `find` |
| `<plug>(fzf-complete-line)` | Line completion (all open buffers) |
| `<plug>(fzf-complete-buffer-line)` | Line completion (current buffer only) |
```vim
" Mapping selecting mappings
nmap <leader><tab> <plug>(fzf-maps-n)
xmap <leader><tab> <plug>(fzf-maps-x)
omap <leader><tab> <plug>(fzf-maps-o)
" Insert mode completion
imap <c-x><c-k> <plug>(fzf-complete-word)
imap <c-x><c-f> <plug>(fzf-complete-path)
imap <c-x><c-l> <plug>(fzf-complete-line)
```
Completion functions
--------------------
| Function | Description |
| --- | --- |
| `fzf#vim#complete#path(command, [spec])` | Path completion |
| `fzf#vim#complete#word([spec])` | Word completion |
| `fzf#vim#complete#line([spec])` | Line completion (all open buffers) |
| `fzf#vim#complete#buffer_line([spec])` | Line completion (current buffer only) |
```vim
" Path completion with custom source command
inoremap <expr> <c-x><c-f> fzf#vim#complete#path('fd')
inoremap <expr> <c-x><c-f> fzf#vim#complete#path('rg --files')
" Word completion with custom spec with popup layout option
inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }})
```
Custom completion
-----------------
`fzf#vim#complete` is a helper function for creating custom fuzzy completion
using fzf. If the first parameter is a command string or a Vim list, it will
be used as the source.
```vim
" Replace the default dictionary completion with fzf-based fuzzy completion
inoremap <expr> <c-x><c-k> fzf#vim#complete('cat /usr/share/dict/words')
```
For advanced uses, you can pass an options dictionary to the function. The set
of options is pretty much identical to that for `fzf#run` only with the
following exceptions:
- `reducer` (funcref)
- Reducer transforms the output lines of fzf into a single string value
- `prefix` (string or funcref; default: `\k*$`)
- Regular expression pattern to extract the completion prefix
- Or a function to extract completion prefix
- Both `source` and `options` can be given as funcrefs that take the
completion prefix as the argument and return the final value
- `sink` or `sink*` are ignored
```vim
" Global line completion (not just open buffers. ripgrep required.)
inoremap <expr> <c-x><c-l> fzf#vim#complete(fzf#wrap({
\ 'prefix': '^.*$',
\ 'source': 'rg -n ^ --color always',
\ 'options': '--ansi --delimiter : --nth 3..',
\ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }}))
```
### Reducer example
```vim
function! s:make_sentence(lines)
return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.'
endfunction
inoremap <expr> <c-x><c-s> fzf#vim#complete({
\ 'source': 'cat /usr/share/dict/words',
\ 'reducer': function('<sid>make_sentence'),
\ 'options': '--multi --reverse --margin 15%,0',
\ 'left': 20})
```
Status line of terminal buffer
------------------------------
When fzf starts in a terminal buffer (see [fzf/README-VIM.md][termbuf]), you
may want to customize the statusline of the containing buffer.
[termbuf]: https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer
### Hide statusline
```vim
autocmd! FileType fzf set laststatus=0 noshowmode noruler
\| autocmd BufLeave <buffer> set laststatus=2 showmode ruler
```
### Custom statusline
```vim
function! s:fzf_statusline()
" Override statusline as you like
highlight fzf1 ctermfg=161 ctermbg=251
highlight fzf2 ctermfg=23 ctermbg=251
highlight fzf3 ctermfg=237 ctermbg=251
setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f
endfunction
autocmd! User FzfStatusLine call <SID>fzf_statusline()
```
License
-------
MIT
[fzf]: https://github.com/junegunn/fzf
[run]: https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun
[ag]: https://github.com/ggreer/the_silver_searcher
[rg]: https://github.com/BurntSushi/ripgrep
[us]: https://github.com/SirVer/ultisnips

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,164 @@
" Copyright (c) 2015 Junegunn Choi
"
" MIT License
"
" Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the
" "Software"), to deal in the Software without restriction, including
" without limitation the rights to use, copy, modify, merge, publish,
" distribute, sublicense, and/or sell copies of the Software, and to
" permit persons to whom the Software is furnished to do so, subject to
" the following conditions:
"
" The above copyright notice and this permission notice shall be
" included in all copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
let s:cpo_save = &cpo
set cpo&vim
let s:is_win = has('win32') || has('win64')
function! s:extend(base, extra)
let base = copy(a:base)
if has_key(a:extra, 'options')
let extra = copy(a:extra)
let extra.extra_options = remove(extra, 'options')
return extend(base, extra)
endif
return extend(base, a:extra)
endfunction
if v:version >= 704
function! s:function(name)
return function(a:name)
endfunction
else
function! s:function(name)
" By Ingo Karkat
return function(substitute(a:name, '^s:', matchstr(expand('<sfile>'), '<SNR>\d\+_\zefunction$'), ''))
endfunction
endif
function! fzf#vim#complete#word(...)
let sources = empty(&dictionary) ? ['/usr/share/dict/words'] : split(&dictionary, ',')
return fzf#vim#complete(s:extend({
\ 'source': 'cat ' . join(map(sources, 'fzf#shellescape(v:val)'))},
\ get(a:000, 0, fzf#wrap())))
endfunction
" ----------------------------------------------------------------------------
" <plug>(fzf-complete-path)
" <plug>(fzf-complete-file)
" <plug>(fzf-complete-file-ag)
" ----------------------------------------------------------------------------
function! s:file_split_prefix(prefix)
let expanded = expand(a:prefix)
let slash = (s:is_win && !&shellslash) ? '\\' : '/'
return isdirectory(expanded) ?
\ [expanded,
\ substitute(a:prefix, '[/\\]*$', slash, ''),
\ ''] :
\ [fnamemodify(expanded, ':h'),
\ substitute(fnamemodify(a:prefix, ':h'), '[/\\]*$', slash, ''),
\ fnamemodify(expanded, ':t')]
endfunction
function! s:file_source(prefix)
let [dir, head, tail] = s:file_split_prefix(a:prefix)
return printf(
\ "cd %s && ".s:file_cmd." | sed %s",
\ fzf#shellescape(dir), fzf#shellescape('s:^:'.(empty(a:prefix) || a:prefix == tail ? '' : head).':'))
endfunction
function! s:file_options(prefix)
let [_, head, tail] = s:file_split_prefix(a:prefix)
return ['--prompt', head, '--query', tail]
endfunction
function! s:fname_prefix(str)
let isf = &isfname
let white = []
let black = []
if isf =~ ',,,'
call add(white, ',')
let isf = substitute(isf, ',,,', ',', 'g')
endif
if isf =~ ',^,,'
call add(black, ',')
let isf = substitute(isf, ',^,,', ',', 'g')
endif
for token in split(isf, ',')
let target = white
if token[0] == '^'
let target = black
let token = token[1:]
endif
let ends = matchlist(token, '\(.\+\)-\(.\+\)')
if empty(ends)
call add(target, token)
else
let ends = map(ends[1:2], "len(v:val) == 1 ? char2nr(v:val) : str2nr(v:val)")
for i in range(ends[0], ends[1])
call add(target, nr2char(i))
endfor
endif
endfor
let prefix = a:str
for offset in range(1, len(a:str))
let char = a:str[len(a:str) - offset]
if (char =~ '\w' || index(white, char) >= 0) && index(black, char) < 0
continue
endif
let prefix = strpart(a:str, len(a:str) - offset + 1)
break
endfor
return prefix
endfunction
function! fzf#vim#complete#path(command, ...)
let s:file_cmd = a:command
return fzf#vim#complete(s:extend({
\ 'prefix': s:function('s:fname_prefix'),
\ 'source': s:function('s:file_source'),
\ 'options': s:function('s:file_options')}, get(a:000, 0, fzf#wrap())))
endfunction
" ----------------------------------------------------------------------------
" <plug>(fzf-complete-line)
" <plug>(fzf-complete-buffer-line)
" ----------------------------------------------------------------------------
function! s:reduce_line(lines)
return join(split(a:lines[0], '\t\zs')[3:], '')
endfunction
function! fzf#vim#complete#line(...)
let [display_bufnames, lines] = fzf#vim#_lines(0)
let nth = display_bufnames ? 4 : 3
return fzf#vim#complete(s:extend({
\ 'prefix': '^.*$',
\ 'source': lines,
\ 'options': '--tiebreak=index --ansi --nth '.nth.'.. --tabstop=1',
\ 'reducer': s:function('s:reduce_line')}, get(a:000, 0, fzf#wrap())))
endfunction
function! fzf#vim#complete#buffer_line(...)
return fzf#vim#complete(s:extend({
\ 'prefix': '^.*$',
\ 'source': fzf#vim#_uniq(getline(1, '$'))}, get(a:000, 0, fzf#wrap())))
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@ -0,0 +1,38 @@
" Copyright (c) 2023 Junegunn Choi
"
" MIT License
"
" Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the
" "Software"), to deal in the Software without restriction, including
" without limitation the rights to use, copy, modify, merge, publish,
" distribute, sublicense, and/or sell copies of the Software, and to
" permit persons to whom the Software is furnished to do so, subject to
" the following conditions:
"
" The above copyright notice and this permission notice shall be
" included in all copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
function! fzf#vim#listproc#quickfix(list)
call setqflist(a:list)
copen
wincmd p
cfirst
normal! zvzz
endfunction
function! fzf#vim#listproc#location(list)
call setloclist(0, a:list)
lopen
wincmd p
lfirst
normal! zvzz
endfunction

View File

@ -0,0 +1,3 @@
#!/usr/bin/env ruby
puts 'preview.rb is deprecated. Use preview.sh instead.'

View File

@ -0,0 +1,86 @@
#!/usr/bin/env bash
REVERSE="\x1b[7m"
RESET="\x1b[m"
if [[ $# -lt 1 ]]; then
echo "usage: $0 [--tag] FILENAME[:LINENO][:IGNORED]"
exit 1
fi
if [[ $1 = --tag ]]; then
shift
"$(dirname "${BASH_SOURCE[0]}")/tagpreview.sh" "$@"
exit $?
fi
# Ignore if an empty path is given
[[ -z $1 ]] && exit
IFS=':' read -r -a INPUT <<< "$1"
FILE=${INPUT[0]}
CENTER=${INPUT[1]}
if [[ "$1" =~ ^[A-Za-z]:\\ ]]; then
FILE=$FILE:${INPUT[1]}
CENTER=${INPUT[2]}
fi
if [[ -n "$CENTER" && ! "$CENTER" =~ ^[0-9] ]]; then
exit 1
fi
CENTER=${CENTER/[^0-9]*/}
# MS Win support
if [[ "$FILE" =~ '\' ]]; then
if [ -z "$MSWINHOME" ]; then
MSWINHOME="$HOMEDRIVE$HOMEPATH"
fi
if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then
MSWINHOME="${MSWINHOME//\\/\\\\}"
FILE="${FILE/#\~\\/$MSWINHOME\\}"
FILE=$(wslpath -u "$FILE")
elif [ -n "$MSWINHOME" ]; then
FILE="${FILE/#\~\\/$MSWINHOME\\}"
fi
fi
FILE="${FILE/#\~\//$HOME/}"
if [ ! -r "$FILE" ]; then
echo "File not found ${FILE}"
exit 1
fi
if [ -z "$CENTER" ]; then
CENTER=0
fi
# Sometimes bat is installed as batcat.
if command -v batcat > /dev/null; then
BATNAME="batcat"
elif command -v bat > /dev/null; then
BATNAME="bat"
fi
if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then
${BATNAME} --style="${BAT_STYLE:-numbers}" --color=always --pager=never \
--highlight-line=$CENTER -- "$FILE"
exit $?
fi
FILE_LENGTH=${#FILE}
MIME=$(file --dereference --mime -- "$FILE")
if [[ "${MIME:FILE_LENGTH}" =~ binary ]]; then
echo "$MIME"
exit 0
fi
DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}"
CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND}
CMD=${CMD//{\}/$(printf %q "$FILE")}
eval "$CMD" 2> /dev/null | awk "{ \
if (NR == $CENTER) \
{ gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \
else printf(\"$RESET%s\n\", \$0); \
}"

View File

@ -0,0 +1,73 @@
#!/usr/bin/env bash
REVERSE="\x1b[7m"
RESET="\x1b[m"
if [ -z "$1" ]; then
echo "usage: $0 FILENAME:TAGFILE:EXCMD"
exit 1
fi
IFS=':' read -r FILE TAGFILE EXCMD <<< "$*"
# Complete file paths which are relative to the given tag file
if [ "${FILE:0:1}" != "/" ]; then
FILE="$(dirname "${TAGFILE}")/${FILE}"
fi
if [ ! -r "$FILE" ]; then
echo "File not found ${FILE}"
exit 1
fi
# If users aren't using vim, they are probably using neovim
if command -v vim > /dev/null; then
VIMNAME="vim"
elif command -v nvim > /dev/null; then
VIMNAME="nvim"
else
echo "Cannot preview tag: vim or nvim unavailable"
exit 1
fi
CENTER="$("${VIMNAME}" -R -i NONE -u NONE -e -m -s "${FILE}" \
-c "set nomagic" \
-c "${EXCMD}" \
-c 'let l=line(".") | new | put =l | print | qa!')" || exit
START_LINE="$(( CENTER - FZF_PREVIEW_LINES / 2 ))"
if (( START_LINE <= 0 )); then
START_LINE=1
fi
END_LINE="$(( START_LINE + FZF_PREVIEW_LINES - 1 ))"
# Sometimes bat is installed as batcat.
if command -v batcat > /dev/null; then
BATNAME="batcat"
elif command -v bat > /dev/null; then
BATNAME="bat"
fi
if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then
${BATNAME} --style="${BAT_STYLE:-numbers}" \
--color=always \
--pager=never \
--wrap=never \
--terminal-width="${FZF_PREVIEW_COLUMNS}" \
--line-range="${START_LINE}:${END_LINE}" \
--highlight-line="${CENTER}" \
"$FILE"
exit $?
fi
DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}"
CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND}
CMD=${CMD//{\}/$(printf %q "$FILE")}
eval "$CMD" 2> /dev/null | awk "{ \
if (NR >= $START_LINE && NR <= $END_LINE) { \
if (NR == $CENTER) \
{ gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \
else printf(\"$RESET%s\n\", \$0); \
} \
}"

15
.vim/bundle/vim-fzf/bin/tags.pl Executable file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env perl
use strict;
foreach my $file (@ARGV) {
open my $lines, $file;
while (<$lines>) {
unless (/^\!/) {
s/^[^\t]*/sprintf("%-24s", $&)/e;
s/$/\t$file/;
print;
}
}
close $lines;
}

View File

@ -0,0 +1,515 @@
fzf-vim.txt fzf-vim Last change: October 14 2023
FZF-VIM - TABLE OF CONTENTS *fzf-vim* *fzf-vim-toc*
==============================================================================
fzf :heart: vim |fzf-vim-fzfheart-vim|
Rationale |fzf-vim-rationale|
Why you should use fzf on Vim |fzf-vim-why-you-should-use-fzf-on-vim|
Installation |fzf-vim-installation|
Using vim-plug |fzf-vim-using-vim-plug|
Dependencies |fzf-vim-dependencies|
Commands |fzf-vim-commands|
Customization |fzf-vim-customization|
Configuration options of the base plugin |fzf-vim-configuration-options-of-the-base-plugin|
Configuration options for fzf.vim |fzf-vim-configuration-options-for-fzf-vim|
Preview window |fzf-vim-preview-window|
Command-level options |fzf-vim-command-level-options|
List type to handle multiple selections |fzf-vim-list-type-to-handle-multiple-selections|
Advanced customization |fzf-vim-advanced-customization|
Vim functions |fzf-vim-vim-functions|
Example: Customizing Files command |fzf-vim-example-customizing-files-command|
Example: git grep wrapper |fzf-vim-example-git-grep-wrapper|
Mappings |fzf-vim-mappings|
Completion functions |fzf-vim-completion-functions|
Custom completion |fzf-vim-custom-completion|
Reducer example |fzf-vim-reducer-example|
Status line of terminal buffer |fzf-vim-status-line-of-terminal-buffer|
Hide statusline |fzf-vim-hide-statusline|
Custom statusline |fzf-vim-custom-statusline|
License |fzf-vim-license|
FZF :HEART: VIM *fzf-vim-fzfheart-vim*
==============================================================================
Things you can do with {fzf}{1} and Vim.
{1} https://github.com/junegunn/fzf
RATIONALE *fzf-vim-rationale*
==============================================================================
{fzf}{1} itself is not a Vim plugin, and the official repository only provides
the {basic wrapper function}{2} for Vim. It's up to the users to write their
own Vim commands with it. However, I've learned that many users of fzf are not
familiar with Vimscript and are looking for the "default" implementation of
the features they can find in the alternative Vim plugins.
{1} https://github.com/junegunn/fzf
{2} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun
WHY YOU SHOULD USE FZF ON VIM *fzf-vim-why-you-should-use-fzf-on-vim*
==============================================================================
Because you can and you love fzf.
fzf runs asynchronously and can be orders of magnitude faster than similar Vim
plugins. However, the benefit may not be noticeable if the size of the input
is small, which is the case for many of the commands provided here.
Nevertheless I wrote them anyway since it's really easy to implement custom
selector with fzf.
INSTALLATION *fzf-vim-installation*
==============================================================================
fzf.vim depends on the basic Vim plugin of {the main fzf repository}{1}, which
means you need to set up both "fzf" and "fzf.vim" on Vim. To learn more about
fzf/Vim integration, see {README-VIM}{3}.
{1} https://github.com/junegunn/fzf
{3} https://github.com/junegunn/fzf/blob/master/README-VIM.md
< Using vim-plug >____________________________________________________________~
*fzf-vim-using-vim-plug*
>
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
<
`fzf#install()` makes sure that you have the latest binary, but it's optional,
so you can omit it if you use a plugin manager that doesn't support hooks.
< Dependencies >______________________________________________________________~
*fzf-vim-dependencies*
- {fzf}{1} 0.41.1 or above
- For syntax-highlighted preview, install {bat}{4}
- If {delta}{5} is available, `GF?`, `Commits` and `BCommits` will use it to
format `git diff` output.
- `Ag` requires {The Silver Searcher (ag)}{6}
- `Rg` requires {ripgrep (rg)}{7}
- `Tags` and `Helptags` require Perl
{1} https://github.com/junegunn/fzf
{4} https://github.com/sharkdp/bat
{5} https://github.com/dandavison/delta
{6} https://github.com/ggreer/the_silver_searcher
{7} https://github.com/BurntSushi/ripgrep
COMMANDS *fzf-vim-commands*
==============================================================================
*:Files* *:GFiles* *:Buffers* *:Colors* *:Ag* *:Rg* *:RG* *:Lines* *:BLines* *:Tags* *:BTags*
*:Changes* *:Marks* *:Jumps* *:Windows* *:Locate* *:History* *:Snippets* *:Commits* *:BCommits*
*:Commands* *:Maps* *:Helptags* *:Filetypes*
-----------------------+--------------------------------------------------------------------------------------
Command | List ~
-----------------------+--------------------------------------------------------------------------------------
`:Files [PATH]` | Files (runs `$FZF_DEFAULT_COMMAND` if defined)
`:GFiles [OPTS]` | Git files ( `git ls-files` )
`:GFiles?` | Git files ( `git status` )
`:Buffers` | Open buffers
`:Colors` | Color schemes
`:Ag [PATTERN]` | {ag}{6} search result ( `ALT-A` to select all, `ALT-D` to deselect all)
`:Rg [PATTERN]` | {rg}{7} search result ( `ALT-A` to select all, `ALT-D` to deselect all)
`:RG [PATTERN]` | {rg}{7} search result; relaunch ripgrep on every keystroke
`:Lines [QUERY]` | Lines in loaded buffers
`:BLines [QUERY]` | Lines in the current buffer
`:Tags [QUERY]` | Tags in the project ( `ctags -R` )
`:BTags [QUERY]` | Tags in the current buffer
`:Changes` | Changelist across all open buffers
`:Marks` | Marks
`:Jumps` | Jumps
`:Windows` | Windows
`:Locate PATTERN` | `locate` command output
`:History` | `v:oldfiles` and open buffers
`:History:` | Command history
`:History/` | Search history
`:Snippets` | Snippets ({UltiSnips}{8})
`:Commits [LOG_OPTS]` | Git commits (requires {fugitive.vim}{9})
`:BCommits [LOG_OPTS]` | Git commits for the current buffer; visual-select lines to track changes in the range
`:Commands` | Commands
`:Maps` | Normal mode mappings
`:Helptags` | Help tags [1]
`:Filetypes` | File types
-----------------------+--------------------------------------------------------------------------------------
*g:fzf_vim.command_prefix*
- Most commands support CTRL-T / CTRL-X / CTRL-V key bindings to open in a new
tab, a new split, or in a new vertical split
- Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen
- You can set `g:fzf_vim.command_prefix` to give the same prefix to the commands
- e.g. `let g:fzf_vim.command_prefix = 'Fzf'` and you have `FzfFiles`, etc.
(1: `Helptags` will shadow the command of the same name from {pathogen}{10}.
But its functionality is still available via `call pathogen#helptags()`. [↩])
{6} https://github.com/ggreer/the_silver_searcher
{7} https://github.com/BurntSushi/ripgrep
{7} https://github.com/BurntSushi/ripgrep
{8} https://github.com/SirVer/ultisnips
{9} https://github.com/tpope/vim-fugitive
{10} https://github.com/tpope/vim-pathogen
CUSTOMIZATION *fzf-vim-customization*
==============================================================================
< Configuration options of the base plugin >__________________________________~
*fzf-vim-configuration-options-of-the-base-plugin*
Every command in fzf.vim internally calls `fzf#wrap` function of the main
repository which supports a set of global option variables. So please read
through {README-VIM}{3} to learn more about them.
{3} https://github.com/junegunn/fzf/blob/master/README-VIM.md
< Configuration options for fzf.vim >_________________________________________~
*fzf-vim-configuration-options-for-fzf-vim*
*g:fzf_vim*
All configuration values for this plugin are stored in `g:fzf_vim` dictionary,
so make sure to initialize it before assigning any configuration values to it.
>
" Initialize configuration dictionary
let g:fzf_vim = {}
<
Preview window~
*fzf-vim-preview-window*
*g:fzf_vim.preview_window*
Some commands will show the preview window on the right. You can customize the
behavior with `g:fzf_vim.preview_window`. Here are some examples:
*g:fzf_vim.preview_bash*
>
" This is the default option:
" - Preview window on the right with 50% width
" - CTRL-/ will toggle preview window.
" - Note that this array is passed as arguments to fzf#vim#with_preview function.
" - To learn more about preview window options, see `--preview-window` section of `man fzf`.
let g:fzf_vim.preview_window = ['right,50%', 'ctrl-/']
" Preview window is hidden by default. You can toggle it with ctrl-/.
" It will show on the right with 50% width, but if the width is smaller
" than 70 columns, it will show above the candidate list
let g:fzf_vim.preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/']
" Empty value to disable preview window altogether
let g:fzf_vim.preview_window = []
" fzf.vim needs bash to display the preview window.
" On Windows, fzf.vim will first see if bash is in $PATH, then if
" Git bash (C:\Program Files\Git\bin\bash.exe) is available.
" If you want it to use a different bash, set this variable.
" let g:fzf_vim = {}
" let g:fzf_vim.preview_bash = 'C:\Git\bin\bash.exe'
<
Command-level options~
*fzf-vim-command-level-options*
*g:fzf_vim.commands_expect* *g:fzf_vim.tags_command* *g:fzf_vim.commits_log_options*
*g:fzf_vim.buffers_jump*
>
" [Buffers] Jump to the existing window if possible
let g:fzf_vim.buffers_jump = 1
" [[B]Commits] Customize the options used by 'git log':
let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'
" [Tags] Command to generate tags file
let g:fzf_vim.tags_command = 'ctags -R'
" [Commands] --expect expression for directly executing the command
let g:fzf_vim.commands_expect = 'alt-enter,ctrl-x'
<
List type to handle multiple selections~
*fzf-vim-list-type-to-handle-multiple-selections*
The following commands will fill the quickfix list when multiple entries are
selected.
- `Ag`
- `Rg` / `RG`
- `Lines` / `BLines`
- `Tags` / `BTags`
*g:fzf_vim.listproc*
By setting `g:fzf_vim.listproc`, you can make them use location list instead.
>
" Default: Use quickfix list
let g:fzf_vim.listproc = { list -> fzf#vim#listproc#quickfix(list) }
" Use location list instead of quickfix list
let g:fzf_vim.listproc = { list -> fzf#vim#listproc#location(list) }
<
You can customize the list type per command by defining variables named
`g:fzf_vim.listproc_{command_name_in_lowercase}`.
*g:fzf_vim.listproc_rg* *g:fzf_vim.listproc_ag*
>
" Command-wise customization
let g:fzf_vim.listproc_ag = { list -> fzf#vim#listproc#quickfix(list) }
let g:fzf_vim.listproc_rg = { list -> fzf#vim#listproc#location(list) }
<
You can further customize the behavior by providing a custom function to
process the list instead of using the predefined `fzf#vim#listproc#quickfix`
or `fzf#vim#listproc#location`.
>
" A customized version of fzf#vim#listproc#quickfix.
" The last two lines are commented out not to move to the first entry.
function! g:fzf_vim.listproc(list)
call setqflist(a:list)
copen
wincmd p
" cfirst
" normal! zvzz
endfunction
<
< Advanced customization >____________________________________________________~
*fzf-vim-advanced-customization*
Vim functions~
*fzf-vim-vim-functions*
Each command in fzf.vim is backed by a Vim function. You can override a
command or define a variation of it by calling its corresponding function.
----------+---------------------------------------------------------------------------------
Command | Vim function ~
----------+---------------------------------------------------------------------------------
`Files` | `fzf#vim#files(dir, [spec dict], [fullscreen bool])`
`GFiles` | `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])`
`GFiles?` | `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])`
`Buffers` | `fzf#vim#buffers([query string], [bufnrs list], [spec dict], [fullscreen bool])`
`Colors` | `fzf#vim#colors([spec dict], [fullscreen bool])`
`Rg` | `fzf#vim#grep(command, [spec dict], [fullscreen bool])`
`RG` | `fzf#vim#grep2(command_prefix, query, [spec dict], [fullscreen bool])`
... | ...
----------+---------------------------------------------------------------------------------
(We can see that the last two optional arguments of each function are
identical. They are directly passed to `fzf#wrap` function. If you haven't
read {README-VIM}{3} already, please read it before proceeding.)
{3} https://github.com/junegunn/fzf/blob/master/README-VIM.md
Example: Customizing Files command~
*fzf-vim-example-customizing-files-command*
This is the default definition of `Files` command:
>
command! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, <bang>0)
<
Let's say you want to a variation of it called `ProjectFiles` that only
searches inside `~/projects` directory. Then you can do it like this:
>
command! -bang ProjectFiles call fzf#vim#files('~/projects', <bang>0)
<
Or, if you want to override the command with different fzf options, just pass
a custom spec to the function.
>
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline']}, <bang>0)
<
Want a preview window?
>
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, <bang>0)
<
It kind of works, but you probably want a nicer previewer program than `cat`.
fzf.vim ships {a versatile preview script}{11} you can readily use. It
internally executes {bat}{4} for syntax highlighting, so make sure to install
it.
>
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, <bang>0)
<
However, it's not ideal to hard-code the path to the script which can be
different in different circumstances. So in order to make it easier to set up
the previewer, fzf.vim provides `fzf#vim#with_preview` helper function.
Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it
with additional preview options.
>
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), <bang>0)
<
You can just omit the spec argument if you only want the previewer.
>
command! -bang -nargs=? -complete=dir Files
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)
<
{11} bin/preview.sh
{4} https://github.com/sharkdp/bat
Example: git grep wrapper~
*fzf-vim-example-git-grep-wrapper*
The following example implements `GGrep` command that works similarly to
predefined `Ag` or `Rg` using `fzf#vim#grep`.
*:LINE*
- We set the base directory to git root by setting `dir` attribute in spec
dictionary.
- {The preview script}{11} supports `grep` format (`FILE_PATH:LINE_NO:...`), so
we can just wrap the spec with `fzf#vim#with_preview` as before to enable
previewer.
>
command! -bang -nargs=* GGrep
\ call fzf#vim#grep(
\ 'git grep --line-number -- '.fzf#shellescape(<q-args>),
\ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0)
<
{11} bin/preview.sh
MAPPINGS *fzf-vim-mappings*
==============================================================================
---------------------------------+------------------------------------------
Mapping | Description ~
---------------------------------+------------------------------------------
<plug>(fzf-maps-n) | Normal mode mappings
<plug>(fzf-maps-i) | Insert mode mappings
<plug>(fzf-maps-x) | Visual mode mappings
<plug>(fzf-maps-o) | Operator-pending mappings
<plug>(fzf-complete-word) | `cat /usr/share/dict/words`
<plug>(fzf-complete-path) | Path completion using `find` (file + dir)
<plug>(fzf-complete-file) | File completion using `find`
<plug>(fzf-complete-line) | Line completion (all open buffers)
<plug>(fzf-complete-buffer-line) | Line completion (current buffer only)
---------------------------------+------------------------------------------
>
" Mapping selecting mappings
nmap <leader><tab> <plug>(fzf-maps-n)
xmap <leader><tab> <plug>(fzf-maps-x)
omap <leader><tab> <plug>(fzf-maps-o)
" Insert mode completion
imap <c-x><c-k> <plug>(fzf-complete-word)
imap <c-x><c-f> <plug>(fzf-complete-path)
imap <c-x><c-l> <plug>(fzf-complete-line)
<
COMPLETION FUNCTIONS *fzf-vim-completion-functions*
==============================================================================
-----------------------------------------+--------------------------------------
Function | Description ~
-----------------------------------------+--------------------------------------
`fzf#vim#complete#path(command, [spec])` | Path completion
`fzf#vim#complete#word([spec])` | Word completion
`fzf#vim#complete#line([spec])` | Line completion (all open buffers)
`fzf#vim#complete#buffer_line([spec])` | Line completion (current buffer only)
-----------------------------------------+--------------------------------------
>
" Path completion with custom source command
inoremap <expr> <c-x><c-f> fzf#vim#complete#path('fd')
inoremap <expr> <c-x><c-f> fzf#vim#complete#path('rg --files')
" Word completion with custom spec with popup layout option
inoremap <expr> <c-x><c-k> fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }})
<
CUSTOM COMPLETION *fzf-vim-custom-completion*
==============================================================================
`fzf#vim#complete` is a helper function for creating custom fuzzy completion
using fzf. If the first parameter is a command string or a Vim list, it will
be used as the source.
>
" Replace the default dictionary completion with fzf-based fuzzy completion
inoremap <expr> <c-x><c-k> fzf#vim#complete('cat /usr/share/dict/words')
<
For advanced uses, you can pass an options dictionary to the function. The set
of options is pretty much identical to that for `fzf#run` only with the
following exceptions:
- `reducer` (funcref)
- Reducer transforms the output lines of fzf into a single string value
- `prefix` (string or funcref; default: `\k*$`)
- Regular expression pattern to extract the completion prefix
- Or a function to extract completion prefix
- Both `source` and `options` can be given as funcrefs that take the completion
prefix as the argument and return the final value
- `sink` or `sink*` are ignored
>
" Global line completion (not just open buffers. ripgrep required.)
inoremap <expr> <c-x><c-l> fzf#vim#complete(fzf#wrap({
\ 'prefix': '^.*$',
\ 'source': 'rg -n ^ --color always',
\ 'options': '--ansi --delimiter : --nth 3..',
\ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }}))
<
< Reducer example >___________________________________________________________~
*fzf-vim-reducer-example*
>
function! s:make_sentence(lines)
return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.'
endfunction
inoremap <expr> <c-x><c-s> fzf#vim#complete({
\ 'source': 'cat /usr/share/dict/words',
\ 'reducer': function('<sid>make_sentence'),
\ 'options': '--multi --reverse --margin 15%,0',
\ 'left': 20})
<
STATUS LINE OF TERMINAL BUFFER *fzf-vim-status-line-of-terminal-buffer*
==============================================================================
When fzf starts in a terminal buffer (see {fzf/README-VIM.md}{12}), you may
want to customize the statusline of the containing buffer.
{12} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer
< Hide statusline >___________________________________________________________~
*fzf-vim-hide-statusline*
>
autocmd! FileType fzf set laststatus=0 noshowmode noruler
\| autocmd BufLeave <buffer> set laststatus=2 showmode ruler
<
< Custom statusline >_________________________________________________________~
*fzf-vim-custom-statusline*
>
function! s:fzf_statusline()
" Override statusline as you like
highlight fzf1 ctermfg=161 ctermbg=251
highlight fzf2 ctermfg=23 ctermbg=251
highlight fzf3 ctermfg=237 ctermbg=251
setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f
endfunction
autocmd! User FzfStatusLine call <SID>fzf_statusline()
<
LICENSE *fzf-vim-license*
==============================================================================
MIT
==============================================================================
vim:tw=78:sw=2:ts=2:ft=help:norl:nowrap:

View File

@ -0,0 +1,63 @@
:Ag fzf-vim.txt /*:Ag*
:BCommits fzf-vim.txt /*:BCommits*
:BLines fzf-vim.txt /*:BLines*
:BTags fzf-vim.txt /*:BTags*
:Buffers fzf-vim.txt /*:Buffers*
:Changes fzf-vim.txt /*:Changes*
:Colors fzf-vim.txt /*:Colors*
:Commands fzf-vim.txt /*:Commands*
:Commits fzf-vim.txt /*:Commits*
:Files fzf-vim.txt /*:Files*
:Filetypes fzf-vim.txt /*:Filetypes*
:GFiles fzf-vim.txt /*:GFiles*
:Helptags fzf-vim.txt /*:Helptags*
:History fzf-vim.txt /*:History*
:Jumps fzf-vim.txt /*:Jumps*
:LINE fzf-vim.txt /*:LINE*
:Lines fzf-vim.txt /*:Lines*
:Locate fzf-vim.txt /*:Locate*
:Maps fzf-vim.txt /*:Maps*
:Marks fzf-vim.txt /*:Marks*
:RG fzf-vim.txt /*:RG*
:Rg fzf-vim.txt /*:Rg*
:Snippets fzf-vim.txt /*:Snippets*
:Tags fzf-vim.txt /*:Tags*
:Windows fzf-vim.txt /*:Windows*
fzf-vim fzf-vim.txt /*fzf-vim*
fzf-vim-advanced-customization fzf-vim.txt /*fzf-vim-advanced-customization*
fzf-vim-command-level-options fzf-vim.txt /*fzf-vim-command-level-options*
fzf-vim-commands fzf-vim.txt /*fzf-vim-commands*
fzf-vim-completion-functions fzf-vim.txt /*fzf-vim-completion-functions*
fzf-vim-configuration-options-for-fzf-vim fzf-vim.txt /*fzf-vim-configuration-options-for-fzf-vim*
fzf-vim-configuration-options-of-the-base-plugin fzf-vim.txt /*fzf-vim-configuration-options-of-the-base-plugin*
fzf-vim-custom-completion fzf-vim.txt /*fzf-vim-custom-completion*
fzf-vim-custom-statusline fzf-vim.txt /*fzf-vim-custom-statusline*
fzf-vim-customization fzf-vim.txt /*fzf-vim-customization*
fzf-vim-dependencies fzf-vim.txt /*fzf-vim-dependencies*
fzf-vim-example-customizing-files-command fzf-vim.txt /*fzf-vim-example-customizing-files-command*
fzf-vim-example-git-grep-wrapper fzf-vim.txt /*fzf-vim-example-git-grep-wrapper*
fzf-vim-fzfheart-vim fzf-vim.txt /*fzf-vim-fzfheart-vim*
fzf-vim-hide-statusline fzf-vim.txt /*fzf-vim-hide-statusline*
fzf-vim-installation fzf-vim.txt /*fzf-vim-installation*
fzf-vim-license fzf-vim.txt /*fzf-vim-license*
fzf-vim-list-type-to-handle-multiple-selections fzf-vim.txt /*fzf-vim-list-type-to-handle-multiple-selections*
fzf-vim-mappings fzf-vim.txt /*fzf-vim-mappings*
fzf-vim-preview-window fzf-vim.txt /*fzf-vim-preview-window*
fzf-vim-rationale fzf-vim.txt /*fzf-vim-rationale*
fzf-vim-reducer-example fzf-vim.txt /*fzf-vim-reducer-example*
fzf-vim-status-line-of-terminal-buffer fzf-vim.txt /*fzf-vim-status-line-of-terminal-buffer*
fzf-vim-toc fzf-vim.txt /*fzf-vim-toc*
fzf-vim-using-vim-plug fzf-vim.txt /*fzf-vim-using-vim-plug*
fzf-vim-vim-functions fzf-vim.txt /*fzf-vim-vim-functions*
fzf-vim-why-you-should-use-fzf-on-vim fzf-vim.txt /*fzf-vim-why-you-should-use-fzf-on-vim*
g:fzf_vim fzf-vim.txt /*g:fzf_vim*
g:fzf_vim.buffers_jump fzf-vim.txt /*g:fzf_vim.buffers_jump*
g:fzf_vim.command_prefix fzf-vim.txt /*g:fzf_vim.command_prefix*
g:fzf_vim.commands_expect fzf-vim.txt /*g:fzf_vim.commands_expect*
g:fzf_vim.commits_log_options fzf-vim.txt /*g:fzf_vim.commits_log_options*
g:fzf_vim.listproc fzf-vim.txt /*g:fzf_vim.listproc*
g:fzf_vim.listproc_ag fzf-vim.txt /*g:fzf_vim.listproc_ag*
g:fzf_vim.listproc_rg fzf-vim.txt /*g:fzf_vim.listproc_rg*
g:fzf_vim.preview_bash fzf-vim.txt /*g:fzf_vim.preview_bash*
g:fzf_vim.preview_window fzf-vim.txt /*g:fzf_vim.preview_window*
g:fzf_vim.tags_command fzf-vim.txt /*g:fzf_vim.tags_command*

View File

@ -0,0 +1,163 @@
" Copyright (c) 2015 Junegunn Choi
"
" MIT License
"
" Permission is hereby granted, free of charge, to any person obtaining
" a copy of this software and associated documentation files (the
" "Software"), to deal in the Software without restriction, including
" without limitation the rights to use, copy, modify, merge, publish,
" distribute, sublicense, and/or sell copies of the Software, and to
" permit persons to whom the Software is furnished to do so, subject to
" the following conditions:
"
" The above copyright notice and this permission notice shall be
" included in all copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
if exists('g:loaded_fzf_vim')
finish
endif
let g:loaded_fzf_vim = 1
let s:cpo_save = &cpo
set cpo&vim
let s:is_win = has('win32') || has('win64')
function! s:conf(name, default)
let conf = get(g:, 'fzf_vim', {})
let val = get(conf, a:name, get(g:, 'fzf_' . a:name, a:default))
return val
endfunction
function! s:defs(commands)
let prefix = s:conf('command_prefix', '')
if prefix =~# '^[^A-Z]'
echoerr 'g:fzf_command_prefix must start with an uppercase letter'
return
endif
for command in a:commands
let name = ':'.prefix.matchstr(command, '\C[A-Z]\S\+')
if 2 != exists(name)
execute substitute(command, '\ze\C[A-Z]', prefix, '')
endif
endfor
endfunction
call s:defs([
\'command! -bang -nargs=? -complete=dir Files call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0)',
\'command! -bang -nargs=? GitFiles call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(<q-args> == "?" ? { "placeholder": "" } : {}), <bang>0)',
\'command! -bang -nargs=? GFiles call fzf#vim#gitfiles(<q-args>, fzf#vim#with_preview(<q-args> == "?" ? { "placeholder": "" } : {}), <bang>0)',
\'command! -bar -bang -nargs=? -complete=buffer Buffers call fzf#vim#buffers(<q-args>, fzf#vim#with_preview({ "placeholder": "{1}" }), <bang>0)',
\'command! -bang -nargs=* Lines call fzf#vim#lines(<q-args>, <bang>0)',
\'command! -bang -nargs=* BLines call fzf#vim#buffer_lines(<q-args>, <bang>0)',
\'command! -bar -bang Colors call fzf#vim#colors(<bang>0)',
\'command! -bang -nargs=+ -complete=dir Locate call fzf#vim#locate(<q-args>, fzf#vim#with_preview(), <bang>0)',
\'command! -bang -nargs=* Ag call fzf#vim#ag(<q-args>, fzf#vim#with_preview(), <bang>0)',
\'command! -bang -nargs=* Rg call fzf#vim#grep("rg --column --line-number --no-heading --color=always --smart-case -- ".fzf#shellescape(<q-args>), fzf#vim#with_preview(), <bang>0)',
\'command! -bang -nargs=* RG call fzf#vim#grep2("rg --column --line-number --no-heading --color=always --smart-case -- ", <q-args>, fzf#vim#with_preview(), <bang>0)',
\'command! -bang -nargs=* Tags call fzf#vim#tags(<q-args>, fzf#vim#with_preview({ "placeholder": "--tag {2}:{-1}:{3..}" }), <bang>0)',
\'command! -bang -nargs=* BTags call fzf#vim#buffer_tags(<q-args>, fzf#vim#with_preview({ "placeholder": "{2}:{3..}" }), <bang>0)',
\'command! -bar -bang Snippets call fzf#vim#snippets(<bang>0)',
\'command! -bar -bang Commands call fzf#vim#commands(<bang>0)',
\'command! -bar -bang Jumps call fzf#vim#jumps(<bang>0)',
\'command! -bar -bang Marks call fzf#vim#marks(<bang>0)',
\'command! -bar -bang Changes call fzf#vim#changes(<bang>0)',
\'command! -bar -bang Helptags call fzf#vim#helptags(fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }), <bang>0)',
\'command! -bar -bang Windows call fzf#vim#windows(fzf#vim#with_preview({ "placeholder": "{2}" }), <bang>0)',
\'command! -bar -bang -nargs=* -range=% -complete=file Commits let b:fzf_winview = winsaveview() | <line1>,<line2>call fzf#vim#commits(<q-args>, fzf#vim#with_preview({ "placeholder": "" }), <bang>0)',
\'command! -bar -bang -nargs=* -range=% BCommits let b:fzf_winview = winsaveview() | <line1>,<line2>call fzf#vim#buffer_commits(<q-args>, fzf#vim#with_preview({ "placeholder": "" }), <bang>0)',
\'command! -bar -bang Maps call fzf#vim#maps("n", <bang>0)',
\'command! -bar -bang Filetypes call fzf#vim#filetypes(<bang>0)',
\'command! -bang -nargs=* History call s:history(<q-args>, fzf#vim#with_preview(), <bang>0)'])
function! s:history(arg, extra, bang)
let bang = a:bang || a:arg[len(a:arg)-1] == '!'
if a:arg[0] == ':'
call fzf#vim#command_history(bang)
elseif a:arg[0] == '/'
call fzf#vim#search_history(bang)
else
call fzf#vim#history(a:extra, bang)
endif
endfunction
function! fzf#complete(...)
return call('fzf#vim#complete', a:000)
endfunction
if (has('nvim') || has('terminal') && has('patch-8.0.995')) && (s:conf('statusline', 1) || s:conf('nvim_statusline', 1))
function! s:fzf_restore_colors()
if exists('#User#FzfStatusLine')
doautocmd User FzfStatusLine
else
if $TERM !~ "256color"
highlight default fzf1 ctermfg=1 ctermbg=8 guifg=#E12672 guibg=#565656
highlight default fzf2 ctermfg=2 ctermbg=8 guifg=#BCDDBD guibg=#565656
highlight default fzf3 ctermfg=7 ctermbg=8 guifg=#D9D9D9 guibg=#565656
else
highlight default fzf1 ctermfg=161 ctermbg=238 guifg=#E12672 guibg=#565656
highlight default fzf2 ctermfg=151 ctermbg=238 guifg=#BCDDBD guibg=#565656
highlight default fzf3 ctermfg=252 ctermbg=238 guifg=#D9D9D9 guibg=#565656
endif
setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f
endif
endfunction
function! s:fzf_vim_term()
if get(w:, 'airline_active', 0)
let w:airline_disabled = 1
autocmd BufWinLeave <buffer> let w:airline_disabled = 0
endif
autocmd WinEnter,ColorScheme <buffer> call s:fzf_restore_colors()
setlocal nospell
call s:fzf_restore_colors()
endfunction
augroup _fzf_statusline
autocmd!
autocmd FileType fzf call s:fzf_vim_term()
augroup END
endif
if !exists('g:fzf#vim#buffers')
let g:fzf#vim#buffers = {}
endif
augroup fzf_buffers
autocmd!
if exists('*reltimefloat')
autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = reltimefloat(reltime())
else
autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = localtime()
endif
autocmd BufDelete * silent! call remove(g:fzf#vim#buffers, expand('<abuf>'))
augroup END
inoremap <expr> <plug>(fzf-complete-word) fzf#vim#complete#word()
if s:is_win
inoremap <expr> <plug>(fzf-complete-path) fzf#vim#complete#path('dir /s/b')
inoremap <expr> <plug>(fzf-complete-file) fzf#vim#complete#path('dir /s/b/a:-d')
else
inoremap <expr> <plug>(fzf-complete-path) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -print \| sed '1d;s:^..::'")
inoremap <expr> <plug>(fzf-complete-file) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -type f -print -o -type l -print \| sed 's:^..::'")
endif
inoremap <expr> <plug>(fzf-complete-file-ag) fzf#vim#complete#path('ag -l -g ""')
inoremap <expr> <plug>(fzf-complete-line) fzf#vim#complete#line()
inoremap <expr> <plug>(fzf-complete-buffer-line) fzf#vim#complete#buffer_line()
nnoremap <silent> <plug>(fzf-maps-n) :<c-u>call fzf#vim#maps('n', 0)<cr>
inoremap <silent> <plug>(fzf-maps-i) <c-o>:call fzf#vim#maps('i', 0)<cr>
xnoremap <silent> <plug>(fzf-maps-x) :<c-u>call fzf#vim#maps('x', 0)<cr>
onoremap <silent> <plug>(fzf-maps-o) <c-c>:<c-u>call fzf#vim#maps('o', 0)<cr>
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@ -0,0 +1,43 @@
vim-lucius
==========
This repository has the Lucius color scheme for Vim. It is already organized
under a "colors" directory, so you can clone the repo into your own vimfiles
(or under bundle, if you use Pathogen).
The color scheme is available for other applications, as well. They can be
found here:
https://github.com/jonathanfilip/lucius
Some sample screenshots of the different configurations:
### Dark
![LuciusDark](http://i.imgur.com/LsZbF.png "LuciusDark (default)")
### Dark High Contrast
![LuciusDarkHighContrast](http://i.imgur.com/e70i9.png "LuciusDarkHighContrast")
### Dark Low Contrast
![LuciusDarkLowContrast](http://i.imgur.com/Hmw8s.png "LuciusDarkLowContrast")
### Black
![LuciusBlack](http://i.imgur.com/iD4ri.png "LuciusBlack")
### Black High Contrast
![LuciusBlackHighContrast](http://i.imgur.com/lHvTJ.png "LuciusBlackHighContrast")
### Black Low Contrast
![LuciusBlackLowContrast](http://i.imgur.com/oZLkg.png "LuciusBlackLowContrast")
### Light
![LuciusLight](http://i.imgur.com/soYD8.png "LuciusLight (light default)")
### Light Low Contrast
![LuciusLightLowContrast](http://i.imgur.com/95I86.png "LuciusLightLowContrast")
### White
![LuciusWhite](http://i.imgur.com/wDzkz.png "LuciusWhite")
### White Low Contrast
![LuciusWhiteLowContrast](http://i.imgur.com/jlUf4.png "LuciusWhiteLowContrast")

View File

@ -0,0 +1,805 @@
" ============================================================================
" Name: Lucius vim color scheme
" Author: Jonathan Filip <jfilip1024@gmail.com>
" Version: 8.1.7
" ----------------------------------------------------------------------------
"
" Light and dark color scheme for GUI and 256 color terminal.
"
" There are several options available to customize the color scheme to your
" own tastes. This is particularly useful when you have to work in different
" environments at different times (home, work, day, night, etc).
"
" The GUI and 256 color terminal versions of this color scheme are identical.
"
" You can set up the color scheme by manually setting the options you want or
" by choosing one of the presets defined. These presets are loaded after you
" first source the color scheme file and are all commands that start with
" 'Lucius'.
"
" I have also started to create color schemes for different applications. I
" have been using them for PuTTY, iTerm2, and Visual Studio, but will keep
" adding more as I go along. You can find the files for these on Github:
"
" https://github.com/jonathanfilip/lucius
"
" You can also clone the following repository if you use Pathogen or something
" similar. It holds the vim color scheme in a 'colors' directory:
"
" https://github.com/jonathanfilip/vim-lucius
"
"
"
" Presets:
"
" There are several presets available that will set all the options for you.
" There are screenshots of each preset below:
"
" * LuciusDark (dark default): http://i.imgur.com/LsZbF.png
" * LuciusDarkHighContrast: http://i.imgur.com/e70i9.png
" * LuciusDarkLowContrast: http://i.imgur.com/Hmw8s.png
" * LuciusBlack: http://i.imgur.com/iD4ri.png
" * LuciusBlackHighContrast: http://i.imgur.com/lHvTJ.png
" * LuciusBlackLowContrast: http://i.imgur.com/oZLkg.png
"
" * LuciusLight (light default): http://i.imgur.com/soYD8.png
" * LuciusLightLowContrast: http://i.imgur.com/95I86.png
" * LuciusWhite: http://i.imgur.com/wDzkz.png
" * LuciusWhiteLowContrast: http://i.imgur.com/jlUf4.png
"
" To use the presets, you just need to set the color scheme first. In your
" vimrc, you can just do this:
"
" colorscheme lucius
" LuciusBlack
"
" You can still just set the background variable and then set the color
" scheme. This will default to LuciusDark for 'dark' and LuciusLight for
" 'light'.
"
"
" Options:
"
" The presets available cover most of the options. You can, however, customize
" things by setting the following variables yourself:
"
" g:lucius_style (default: 'dark')
"
" Set this option to either 'light' or 'dark' for your desired color scheme.
" It has the same effect as setting the background.
"
" g:lucius_contrast (default: 'normal')
"
" This option determines the contrast to use for text/ui elements. It can be
" set to 'low', 'normal', or 'high'. At this time there is no 'high' for the
" light scheme.
"
" g:lucius_contrast_bg (default: 'normal')
"
" Setting this option makes the background a higher contrast. Current settings
" are 'normal' and 'high'.
"
" g:lucius_use_bold (default: 1)
"
" Setting this will cause the color scheme to use bold fonts for some items.
"
" g:lucius_use_underline (default: 1)
"
" Setting this will cause the color scheme to use underlined fonts for some
" items.
"
" g:lucius_no_term_bg (default: 0)
"
" Setting this will cause the color scheme to not set a background color in
" the terminal (useful for transparency or terminals with different background
" colors).
"
" License:
"
" Copyright (c) 2015 Jonathan Filip
"
" Permission is hereby granted, free of charge, to any person obtaining a copy
" of this software and associated documentation files (the "Software"), to deal
" in the Software without restriction, including without limitation the rights
" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
" copies of the Software, and to permit persons to whom the Software is
" furnished to do so, subject to the following conditions:
"
" The above copyright notice and this permission notice shall be included in
" all copies or substantial portions of the Software.
"
" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
" THE SOFTWARE.
"
" ============================================================================
" ============================================================================
" Options:
" ============================================================================
unlet! g:colors_name
hi clear
if exists("syntax_on")
syntax reset
endif
if exists("g:lucius_style")
let s:style = g:lucius_style
else
let s:style = &background
endif
if exists("g:lucius_contrast")
let s:contrast = g:lucius_contrast
else
let s:contrast = "normal"
endif
if exists("g:lucius_contrast_bg")
let s:contrast_bg = g:lucius_contrast_bg
else
let s:contrast_bg = "normal"
endif
if exists("g:lucius_use_bold")
let s:use_bold = g:lucius_use_bold
else
let s:use_bold = 1
endif
if exists("g:lucius_use_underline")
let s:use_underline = g:lucius_use_underline
else
let s:use_underline = 1
endif
if exists("g:lucius_no_term_bg")
let s:no_term_bg = g:lucius_no_term_bg
else
let s:no_term_bg = 0
endif
" ============================================================================
" Color Map:
" ============================================================================
let s:color_map = {
\ 'bg': 'bg', 'fg': 'fg', 'NONE': 'NONE',
\ '#000000': '16', '#00005f': '17', '#000087': '18', '#0000af': '19',
\ '#0000d7': '20', '#0000ff': '21', '#005f00': '22', '#005f5f': '23',
\ '#005f87': '24', '#005faf': '25', '#005fd7': '26', '#005fff': '27',
\ '#008700': '28', '#00875f': '29', '#008787': '30', '#0087af': '31',
\ '#0087d7': '32', '#0087ff': '33', '#00af00': '34', '#00af5f': '35',
\ '#00af87': '36', '#00afaf': '37', '#00afd7': '38', '#00afff': '39',
\ '#00d700': '40', '#00d75f': '41', '#00d787': '42', '#00d7af': '43',
\ '#00d7d7': '44', '#00d7ff': '45', '#00ff00': '46', '#00ff5f': '47',
\ '#00ff87': '48', '#00ffaf': '49', '#00ffd7': '50', '#00ffff': '51',
\ '#5f0000': '52', '#5f005f': '53', '#5f0087': '54', '#5f00af': '55',
\ '#5f00d7': '56', '#5f00ff': '57', '#5f5f00': '58', '#5f5f5f': '59',
\ '#5f5f87': '60', '#5f5faf': '61', '#5f5fd7': '62', '#5f5fff': '63',
\ '#5f8700': '64', '#5f875f': '65', '#5f8787': '66', '#5f87af': '67',
\ '#5f87d7': '68', '#5f87ff': '69', '#5faf00': '70', '#5faf5f': '71',
\ '#5faf87': '72', '#5fafaf': '73', '#5fafd7': '74', '#5fafff': '75',
\ '#5fd700': '76', '#5fd75f': '77', '#5fd787': '78', '#5fd7af': '79',
\ '#5fd7d7': '80', '#5fd7ff': '81', '#5fff00': '82', '#5fff5f': '83',
\ '#5fff87': '84', '#5fffaf': '85', '#5fffd7': '86', '#5fffff': '87',
\ '#870000': '88', '#87005f': '89', '#870087': '90', '#8700af': '91',
\ '#8700d7': '92', '#8700ff': '93', '#875f00': '94', '#875f5f': '95',
\ '#875f87': '96', '#875faf': '97', '#875fd7': '98', '#875fff': '99',
\ '#878700': '100', '#87875f': '101', '#878787': '102', '#8787af': '103',
\ '#8787d7': '104', '#8787ff': '105', '#87af00': '106', '#87af5f': '107',
\ '#87af87': '108', '#87afaf': '109', '#87afd7': '110', '#87afff': '111',
\ '#87d700': '112', '#87d75f': '113', '#87d787': '114', '#87d7af': '115',
\ '#87d7d7': '116', '#87d7ff': '117', '#87ff00': '118', '#87ff5f': '119',
\ '#87ff87': '120', '#87ffaf': '121', '#87ffd7': '122', '#87ffff': '123',
\ '#af0000': '124', '#af005f': '125', '#af0087': '126', '#af00af': '127',
\ '#af00d7': '128', '#af00ff': '129', '#af5f00': '130', '#af5f5f': '131',
\ '#af5f87': '132', '#af5faf': '133', '#af5fd7': '134', '#af5fff': '135',
\ '#af8700': '136', '#af875f': '137', '#af8787': '138', '#af87af': '139',
\ '#af87d7': '140', '#af87ff': '141', '#afaf00': '142', '#afaf5f': '143',
\ '#afaf87': '144', '#afafaf': '145', '#afafd7': '146', '#afafff': '147',
\ '#afd700': '148', '#afd75f': '149', '#afd787': '150', '#afd7af': '151',
\ '#afd7d7': '152', '#afd7ff': '153', '#afff00': '154', '#afff5f': '155',
\ '#afff87': '156', '#afffaf': '157', '#afffd7': '158', '#afffff': '159',
\ '#d70000': '160', '#d7005f': '161', '#d70087': '162', '#d700af': '163',
\ '#d700d7': '164', '#d700ff': '165', '#d75f00': '166', '#d75f5f': '167',
\ '#d75f87': '168', '#d75faf': '169', '#d75fd7': '170', '#d75fff': '171',
\ '#d78700': '172', '#d7875f': '173', '#d78787': '174', '#d787af': '175',
\ '#d787d7': '176', '#d787ff': '177', '#d7af00': '178', '#d7af5f': '179',
\ '#d7af87': '180', '#d7afaf': '181', '#d7afd7': '182', '#d7afff': '183',
\ '#d7d700': '184', '#d7d75f': '185', '#d7d787': '186', '#d7d7af': '187',
\ '#d7d7d7': '188', '#d7d7ff': '189', '#d7ff00': '190', '#d7ff5f': '191',
\ '#d7ff87': '192', '#d7ffaf': '193', '#d7ffd7': '194', '#d7ffff': '195',
\ '#ff0000': '196', '#ff005f': '197', '#ff0087': '198', '#ff00af': '199',
\ '#ff00d7': '200', '#ff00ff': '201', '#ff5f00': '202', '#ff5f5f': '203',
\ '#ff5f87': '204', '#ff5faf': '205', '#ff5fd7': '206', '#ff5fff': '207',
\ '#ff8700': '208', '#ff875f': '209', '#ff8787': '210', '#ff87af': '211',
\ '#ff87d7': '212', '#ff87ff': '213', '#ffaf00': '214', '#ffaf5f': '215',
\ '#ffaf87': '216', '#ffafaf': '217', '#ffafd7': '218', '#ffafff': '219',
\ '#ffd700': '220', '#ffd75f': '221', '#ffd787': '222', '#ffd7af': '223',
\ '#ffd7d7': '224', '#ffd7ff': '225', '#ffff00': '226', '#ffff5f': '227',
\ '#ffff87': '228', '#ffffaf': '229', '#ffffd7': '230', '#ffffff': '231',
\ '#080808': '232', '#121212': '233', '#1c1c1c': '234', '#262626': '235',
\ '#303030': '236', '#3a3a3a': '237', '#444444': '238', '#4e4e4e': '239',
\ '#585858': '240', '#626262': '241', '#6c6c6c': '242', '#767676': '243',
\ '#808080': '244', '#8a8a8a': '245', '#949494': '246', '#9e9e9e': '247',
\ '#a8a8a8': '248', '#b2b2b2': '249', '#bcbcbc': '250', '#c6c6c6': '251',
\ '#d0d0d0': '252', '#dadada': '253', '#e4e4e4': '254', '#eeeeee': '255',
\ }
" ============================================================================
" Functions:
" ============================================================================
function! s:AddCterm(name)
exec "let l:gfg = synIDattr(synIDtrans(hlID('" . a:name .
\ "')), 'fg', 'gui')"
exec "let l:gbg = synIDattr(synIDtrans(hlID('" . a:name .
\ "')), 'bg', 'gui')"
let l:gfg = l:gfg == "" ? "NONE" : l:gfg
let l:gbg = l:gbg == "" ? "NONE" : l:gbg
exec "hi " . a:name . " ctermfg=" . s:color_map[l:gfg] .
\ " ctermbg=" . s:color_map[l:gbg]
endfunction
function! s:AddSpCterm(name)
exec "let l:gsp = synIDattr(synIDtrans(hlID('" . a:name .
\ "')), 'sp', 'gui')"
let l:gsp = l:gsp == "" ? "NONE" : l:gsp
exec "hi " . a:name . " ctermfg=" . s:color_map[l:gsp]
endfunction
" ============================================================================
" Text Groups:
" ============================================================================
let s:normal_items = [
\ "ColorColumn", "Comment", "Conceal", "Constant", "Cursor", "CursorColumn",
\ "CursorIM", "CursorLine", "CursorLineNr", "DiffAdd", "DiffChange",
\ "DiffDelete", "Directory", "Error", "ErrorMsg", "Identifier",
\ "IncSearch", "LineNr", "MatchParen", "ModeMsg", "MoreMsg",
\ "NonText", "Pmenu", "PmenuSbar", "PmenuSel",
\ "PmenuThumb", "PreProc", "Question", "Search", "SignColumn",
\ "Special", "SpecialKey", "Statement", "StatusLineNC", "TabLine",
\ "TabLineFill", "Todo", "Type", "VertSplit", "Visual",
\ "WarningMsg", "WildMenu",
\ ]
let s:bold_items = [
\ "DiffText", "FoldColumn", "Folded", "StatusLine", "TabLineSel",
\ "Title", "CursorLineNr",
\ ]
let s:underline_items = [
\ "Underlined", "VisualNOS"
\ ]
let s:undercurl_items = [
\ "SpellBad", "SpellCap", "SpellLocal", "SpellRare"
\ ]
" ============================================================================
" Color Definitions:
" ============================================================================
" ----------------------------------------------------------------------------
" 'Normal' Colors:
" ----------------------------------------------------------------------------
hi clear Normal
hi Normal gui=none cterm=none term=none
if s:style == "light"
if s:contrast == "high"
hi Normal guifg=#000000
elseif s:contrast == "low"
hi Normal guifg=#626262
else
hi Normal guifg=#444444
endif
else
if s:contrast == "high"
hi Normal guifg=#eeeeee
elseif s:contrast == "low"
hi Normal guifg=#bcbcbc
else
hi Normal guifg=#d7d7d7
endif
endif
if s:style == "light"
if s:contrast_bg == "high"
hi Normal guibg=#ffffff
else
hi Normal guibg=#eeeeee
endif
else
if s:contrast_bg == "high"
hi Normal guibg=#121212
else
hi Normal guibg=#303030
endif
endif
call s:AddCterm("Normal")
" ----------------------------------------------------------------------------
" Extra setup
" ----------------------------------------------------------------------------
exec "set background=" . s:style
" Clear default settings
for s:item in s:normal_items + s:bold_items + s:underline_items + s:undercurl_items
exec "hi " . s:item . " guifg=NONE guibg=NONE gui=none"
\ . " ctermfg=NONE ctermbg=NONE cterm=none term=none"
endfor
let g:colors_name="lucius"
" ----------------------------------------------------------------------------
" Text Markup:
" ----------------------------------------------------------------------------
if s:style == "light"
hi NonText guifg=#afafd7
hi SpecialKey guifg=#afd7af
if s:contrast == "low"
hi Comment guifg=#9e9e9e
hi Conceal guifg=#9e9e9e
hi Constant guifg=#d78700
hi Directory guifg=#00af87
hi Identifier guifg=#00af00
hi PreProc guifg=#00afaf
hi Special guifg=#af00af
hi Statement guifg=#0087d7
hi Title guifg=#0087d7
hi Type guifg=#0087af
else
hi Comment guifg=#808080
hi Conceal guifg=#808080
hi Constant guifg=#af5f00
hi Directory guifg=#00875f
hi Identifier guifg=#008700
hi PreProc guifg=#008787
hi Special guifg=#870087
hi Statement guifg=#005faf
hi Title guifg=#005faf
hi Type guifg=#005f87
endif
else
hi NonText guifg=#5f5f87
hi SpecialKey guifg=#5f875f
if s:contrast == "low"
hi Comment guifg=#6c6c6c
hi Conceal guifg=#6c6c6c
hi Constant guifg=#afaf87
hi Directory guifg=#87af87
hi Identifier guifg=#87af5f
hi PreProc guifg=#5faf87
hi Special guifg=#af87af
hi Statement guifg=#5fafd7
hi Title guifg=#00afd7
hi Type guifg=#5fafaf
elseif s:contrast == "high"
hi Comment guifg=#8a8a8a
hi Conceal guifg=#8a8a8a
hi Constant guifg=#ffffd7
hi Directory guifg=#d7ffd7
hi Identifier guifg=#d7ffaf
hi PreProc guifg=#afffd7
hi Special guifg=#ffd7ff
hi Statement guifg=#afffff
hi Title guifg=#87d7ff
hi Type guifg=#afffff
else
hi Comment guifg=#808080
hi Conceal guifg=#808080
hi Constant guifg=#d7d7af
hi Directory guifg=#afd7af
hi Identifier guifg=#afd787
hi PreProc guifg=#87d7af
hi Special guifg=#d7afd7
hi Statement guifg=#87d7ff
hi Title guifg=#5fafd7
hi Type guifg=#87d7d7
endif
endif
" ----------------------------------------------------------------------------
" Highlighting:
" ----------------------------------------------------------------------------
hi Cursor guifg=bg
hi CursorColumn guifg=NONE
hi CursorIM guifg=bg
hi CursorLine guifg=NONE
hi Visual guifg=NONE
hi VisualNOS guifg=fg guibg=NONE
if s:style == "light"
hi CursorColumn guibg=#dadada
hi CursorLine guibg=#dadada
hi IncSearch guifg=fg guibg=#5fd7d7
hi MatchParen guifg=NONE guibg=#5fd7d7
hi Search guifg=fg guibg=#ffaf00
hi Visual guibg=#afd7ff
if s:contrast == "low"
hi Cursor guibg=#87afd7
hi CursorIM guibg=#87afd7
hi Error guifg=#d70000 guibg=#ffd7d7
hi Todo guifg=#af8700 guibg=#ffffaf
else
hi Cursor guibg=#5f87af
hi CursorIM guibg=#5f87af
hi Error guifg=#af0000 guibg=#d7afaf
hi Todo guifg=#875f00 guibg=#ffffaf
endif
else
hi CursorColumn guibg=#444444
hi CursorLine guibg=#444444
hi IncSearch guifg=bg
hi MatchParen guifg=fg guibg=#87af00
hi Search guifg=bg
hi Visual guibg=#005f87
if s:contrast == "low"
hi Cursor guibg=#5f87af
hi CursorIM guibg=#5f87af
hi Error guifg=#d75f5f guibg=#870000
hi IncSearch guibg=#00afaf
hi Search guibg=#d78700
hi Todo guifg=#afaf00 guibg=#5f5f00
elseif s:contrast == "high"
hi Cursor guibg=#afd7ff
hi CursorIM guibg=#afd7ff
hi Error guifg=#ffafaf guibg=#af0000
hi IncSearch guibg=#87ffff
hi Search guibg=#ffaf5f
hi Todo guifg=#ffff87 guibg=#87875f
else
hi Cursor guibg=#87afd7
hi CursorIM guibg=#87afd7
hi Error guifg=#ff8787 guibg=#870000
hi IncSearch guibg=#5fd7d7
hi Search guibg=#d78700
hi Todo guifg=#d7d75f guibg=#5f5f00
endif
endif
" ----------------------------------------------------------------------------
" Messages:
" ----------------------------------------------------------------------------
hi Question guifg=fg
if s:style == "light"
if s:contrast == "low"
hi ErrorMsg guifg=#d70000
hi ModeMsg guifg=#0087ff
hi MoreMsg guifg=#0087ff
hi WarningMsg guifg=#d78700
else
hi ErrorMsg guifg=#af0000
hi ModeMsg guifg=#005faf
hi MoreMsg guifg=#005faf
hi WarningMsg guifg=#af5f00
endif
else
if s:contrast == "low"
hi ErrorMsg guifg=#d75f5f
hi ModeMsg guifg=#87afaf
hi MoreMsg guifg=#87afaf
hi WarningMsg guifg=#af875f
elseif s:contrast == "high"
hi ErrorMsg guifg=#ff8787
hi ModeMsg guifg=#afffff
hi MoreMsg guifg=#afffff
hi WarningMsg guifg=#ffaf87
else
hi ErrorMsg guifg=#ff5f5f
hi ModeMsg guifg=#afd7d7
hi MoreMsg guifg=#afd7d7
hi WarningMsg guifg=#d7875f
endif
endif
" ----------------------------------------------------------------------------
" UI:
" ----------------------------------------------------------------------------
hi ColorColumn guifg=NONE
hi Pmenu guifg=bg
hi PmenuSel guifg=fg
hi PmenuThumb guifg=fg
hi StatusLine guifg=bg
hi TabLine guifg=bg
hi TabLineSel guifg=fg
hi WildMenu guifg=fg
if s:style == "light"
hi ColorColumn guibg=#e4e4e4
hi CursorLineNr guifg=#626262 guibg=#dadada
hi FoldColumn guibg=#bcbcbc
hi Folded guibg=#bcbcbc
hi LineNr guifg=#9e9e9e guibg=#dadada
hi PmenuSel guibg=#afd7ff
hi SignColumn guibg=#d0d0d0
hi StatusLineNC guifg=#dadada
hi TabLineFill guifg=#dadada
hi VertSplit guifg=#e4e4e4
hi WildMenu guibg=#afd7ff
if s:contrast == "low"
hi FoldColumn guifg=#808080
hi Folded guifg=#808080
hi Pmenu guibg=#9e9e9e
hi PmenuSbar guifg=#9e9e9e guibg=#626262
hi PmenuThumb guibg=#9e9e9e
hi SignColumn guifg=#808080
hi StatusLine guibg=#9e9e9e
hi StatusLineNC guibg=#9e9e9e
hi TabLine guibg=#9e9e9e
hi TabLineFill guibg=#9e9e9e
hi TabLineSel guibg=#afd7ff
hi VertSplit guibg=#9e9e9e
else
hi FoldColumn guifg=#626262
hi Folded guifg=#626262
hi Pmenu guibg=#808080
hi PmenuSbar guifg=#808080 guibg=#444444
hi PmenuThumb guibg=#9e9e9e
hi SignColumn guifg=#626262
hi StatusLine guibg=#808080
hi StatusLineNC guibg=#808080
hi TabLine guibg=#808080
hi TabLineFill guibg=#808080
hi TabLineSel guibg=#afd7ff
hi VertSplit guibg=#808080
endif
else
hi ColorColumn guibg=#3a3a3a
hi CursorLineNr guifg=#9e9e9e guibg=#444444
hi FoldColumn guibg=#4e4e4e
hi Folded guibg=#4e4e4e
hi LineNr guifg=#626262 guibg=#444444
hi PmenuSel guibg=#005f87
hi SignColumn guibg=#4e4e4e
hi StatusLineNC guifg=#4e4e4e
hi TabLineFill guifg=#4e4e4e
hi VertSplit guifg=#626262
hi WildMenu guibg=#005f87
if s:contrast == "low"
hi FoldColumn guifg=#a8a8a8
hi Folded guifg=#a8a8a8
hi Pmenu guibg=#8a8a8a
hi PmenuSbar guifg=#8a8a8a guibg=#bcbcbc
hi PmenuThumb guibg=#585858
hi SignColumn guifg=#8a8a8a
hi StatusLine guibg=#8a8a8a
hi StatusLineNC guibg=#8a8a8a
hi TabLine guibg=#8a8a8a
hi TabLineFill guibg=#8a8a8a
hi TabLineSel guibg=#005f87
hi VertSplit guibg=#8a8a8a
elseif s:contrast == "high"
hi FoldColumn guifg=#c6c6c6
hi Folded guifg=#c6c6c6
hi Pmenu guibg=#bcbcbc
hi PmenuSbar guifg=#bcbcbc guibg=#dadada
hi PmenuThumb guibg=#8a8a8a
hi SignColumn guifg=#bcbcbc
hi StatusLine guibg=#bcbcbc
hi StatusLineNC guibg=#bcbcbc
hi TabLine guibg=#bcbcbc
hi TabLineFill guibg=#bcbcbc
hi TabLineSel guibg=#0087af
hi VertSplit guibg=#bcbcbc
else
hi FoldColumn guifg=#bcbcbc
hi Folded guifg=#bcbcbc
hi Pmenu guibg=#b2b2b2
hi PmenuSbar guifg=#b2b2b2 guibg=#d0d0d0
hi PmenuThumb guibg=#808080
hi SignColumn guifg=#b2b2b2
hi StatusLine guibg=#b2b2b2
hi StatusLineNC guibg=#b2b2b2
hi TabLine guibg=#b2b2b2
hi TabLineFill guibg=#b2b2b2
hi TabLineSel guibg=#005f87
hi VertSplit guibg=#b2b2b2
endif
endif
" ----------------------------------------------------------------------------
" Diff:
" ----------------------------------------------------------------------------
hi DiffAdd guifg=fg
hi DiffChange guifg=fg
hi DiffDelete guifg=fg
if s:style == "light"
hi DiffAdd guibg=#afd7af
hi DiffChange guibg=#d7d7af
hi DiffDelete guibg=#d7afaf
hi DiffText guibg=#d7d7af
if s:contrast == "low"
hi DiffText guifg=#ff8700
else
hi DiffText guifg=#d75f00
endif
else
hi DiffAdd guibg=#5f875f
hi DiffChange guibg=#87875f
hi DiffDelete guibg=#875f5f
hi DiffText guibg=#87875f
if s:contrast == "low"
hi DiffText guifg=#d7d75f
else
hi DiffText guifg=#ffff87
endif
endif
" ----------------------------------------------------------------------------
" Spelling:
" ----------------------------------------------------------------------------
if s:style == "light"
hi SpellBad guisp=#d70000
hi SpellCap guisp=#00afd7
hi SpellLocal guisp=#d7af00
hi SpellRare guisp=#5faf00
else
hi SpellBad guisp=#ff5f5f
hi SpellCap guisp=#5fafd7
hi SpellLocal guisp=#d7af5f
hi SpellRare guisp=#5faf5f
endif
" ----------------------------------------------------------------------------
" Miscellaneous:
" ----------------------------------------------------------------------------
hi Ignore guifg=bg
hi Underlined guifg=fg
" ============================================================================
" Text Emphasis:
" ============================================================================
if s:use_bold == 1
for s:item in s:bold_items
exec "hi " . s:item . " gui=bold cterm=bold term=none"
endfor
endif
if s:use_underline == 1
for s:item in s:underline_items
exec "hi " . s:item . " gui=underline cterm=underline term=none"
endfor
for s:item in s:undercurl_items
exec "hi " . s:item . " cterm=underline"
endfor
endif
for s:item in s:undercurl_items
exec "hi " . s:item . " gui=undercurl term=none"
endfor
" ============================================================================
" Cterm Colors:
" ============================================================================
for s:item in s:normal_items + s:bold_items + s:underline_items
call s:AddCterm(s:item)
endfor
for s:item in s:undercurl_items
call s:AddSpCterm(s:item)
endfor
if s:no_term_bg == 1
hi Normal ctermbg=NONE
endif
" ============================================================================
" Alternative Bold Definitions:
" ============================================================================
let s:alternative_bold_items = ["Identifier", "PreProc", "Statement",
\ "Special", "Constant", "Type"]
for s:item in s:alternative_bold_items
exec "let s:temp_gui_fg = synIDattr(synIDtrans(hlID('" . s:item .
\ "')), 'fg', 'gui')"
exec "let s:temp_cterm_fg = synIDattr(synIDtrans(hlID('" . s:item .
\ "')), 'fg', 'cterm')"
exec "hi B" . s:item . " guifg=" . s:temp_gui_fg . " ctermfg=" .
\ s:temp_cterm_fg . " gui=bold cterm=bold term=none"
endfor
" ============================================================================
" Plugin Specific Colors:
" ============================================================================
" Tagbar:
hi link TagbarAccessPublic Constant
hi link TagbarAccessProtected Type
hi link TagbarAccessPrivate PreProc
" Vimwiki:
hi link VimwikiHeader1 BIdentifier
hi link VimwikiHeader2 BPreProc
hi link VimwikiHeader3 BStatement
hi link VimwikiHeader4 BSpecial
hi link VimwikiHeader5 BConstant
hi link VimwikiHeader6 BType
" CoC:
hi link CocErrorSign ErrorMsg
hi link CocErrorFloat Pmenu
hi link CocWarningSign WarningMsg
hi link CocWarningFloat Pmenu
hi link CocInfoSign MoreMsg
hi link CocInfoFloat Pmenu
hi link CocHintFloat Directory
hi link CocHintFloat Pmenu
" ============================================================================
" Preset Commands:
" ============================================================================
function! SetLucius(style, contrast, contrast_bg)
let g:lucius_style = a:style
let g:lucius_contrast = a:contrast
let g:lucius_contrast_bg = a:contrast_bg
endfunction
command! LuciusLight call SetLucius("light", "normal", "normal")
\ | colorscheme lucius
command! LuciusLightLowContrast call SetLucius("light", "low", "normal")
\ | colorscheme lucius
command! LuciusLightHighContrast call SetLucius("light", "high", "normal")
\ | colorscheme lucius
command! LuciusWhite call SetLucius("light", "normal", "high")
\ | colorscheme lucius
command! LuciusWhiteLowContrast call SetLucius("light", "low", "high")
\ | colorscheme lucius
command! LuciusWhiteHighContrast call SetLucius("light", "high", "high")
\ | colorscheme lucius
command! LuciusDark call SetLucius("dark", "normal", "normal")
\ | colorscheme lucius
command! LuciusDarkLowContrast call SetLucius("dark", "low", "normal")
\ | colorscheme lucius
command! LuciusDarkHighContrast call SetLucius("dark", "high", "normal")
\ | colorscheme lucius
command! LuciusBlack call SetLucius("dark", "normal", "high")
\ | colorscheme lucius
command! LuciusBlackLowContrast call SetLucius("dark", "low", "high")
\ | colorscheme lucius
command! LuciusBlackHighContrast call SetLucius("dark", "high", "high")
\ | colorscheme lucius
" vim: tw=78

View File

@ -1,42 +1,29 @@
" load plugins
execute pathogen#infect()
Helptags
set nocompatible
set autochdir
set shm+=I
set path+=.,**
set mouse=v
set laststatus=2
" mouse support
set mouse=
" real backspace, please
set backspace=indent,eol,start
set nonumber
" don't complain about $( )
let g:is_posix=1
" colors
set background=dark
colorscheme lucius
set cursorline
set scrolloff=3
set spelllang=de,en
syntax off
filetype on
set spelllang=de,en
let mapleader = ","
" * and # are only highlighting
" n searches in the direction of * or #
" nnoremap * *``
" nnoremap # #``
" nnoremap n <S-n>
" SMOOTH SCROLLING
set t_TI=[4?h
set t_TE=[4?l
" INDENTATION
set noautoindent
set nosmartindent
set nocindent
" DIFF
set formatoptions=crolj
"
syntax on
filetype plugin on
set omnifunc=syntaxcomplete#Complete
" SEARCH
set hlsearch
@ -59,16 +46,38 @@ set list
set listchars=tab:>_,trail:>
set fillchars=vert:\|,eob:\
set showcmd
set clipboard=unnamedplus
set wildmenu
set wildmode=longest:full,full
" C specific highlighting
let c_space_errors=1
let c_gnu=1
let c_comment_strings=1
let c_curly_error=1
"set makeprg=cc\ -o\ %:r\ %
set autowrite
function! s:build_quickfix_list(lines)
call setqflist(map(copy(a:lines), '{ "filename": v:val, "lnum": 1 }'))
copen
cc
endfunction
" let g:fzf_history_dir = '~/.local/vim/fzf-history'
let g:fzf_layout = { 'down': '40%' }
nnoremap <c-p> :FZF -i -e --layout=reverse<CR>
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-x': 'split',
\ 'ctrl-v': 'vsplit' }
function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
return "\<Tab>"
else
return "\<C-N>"
endif
endfunction
inoremap <tab> <C-R>=CleverTab()<CR>
" HIGHLIGHT SPECIAL WORDS
match ErrorMsg '\(TODO:\|FIXME\|XXX\|workaround\|WTF\|: error:.*\|\s\+$\| \+\ze\t\)'
" DIFF
set formatoptions=crolj
" TEMPORARY FILES
set undofile
@ -77,214 +86,8 @@ set backup
set backupcopy=yes
set backupdir=~/.local/vim/backup//
set directory=~/.local/vim/swapfiles//
set updatetime=2000
set updatecount=100
silent execute '!mkdir -p ~/.local/vim/backup ~/.local/vim/undo ~/.local/vim/swapfiles'
" TAB LINE
set tabline=%!Tabline()
function! Tabline() abort
let l:line = ''
for l:i in range(1, tabpagenr('$'))
if l:i == tabpagenr()
let l:line .= '%#TabLineSel#'
else
let l:line .= '%#TabLine#'
endif
let l:label = fnamemodify(
\ bufname(tabpagebuflist(l:i)[tabpagewinnr(l:i) - 1]), ':t' )
let l:line .= ' ' . l:label . ' '
endfor
let l:line .= '%#TabLineFill#'
return l:line
endfunction
" CREATE DIRECTORIES
silent execute 'cs add ~/.dev/cscope.out'
set csprg=cscope\ -C
set cst
set cspc=9
" LOOK N FEEL
set t_Co=256
set t_ut=
set background=dark
let g:is_posix=1
colorscheme goodwolf
" HIGHLIGHT SPECIAL WORDS
match ErrorMsg '\(TODO:\|FIXME\|XXX\|workaround\|WTF\|: error:.*\|\s\+$\| \+\ze\t\)'
" MY THEME
hi ColorColumn ctermbg=234 ctermfg=249 cterm=NONE
hi CursorLine ctermbg=NONE ctermfg=NONE cterm=NONE
hi CursorLineNr ctermbg=NONE ctermfg=NONE cterm=NONE
hi LineNr ctermbg=NONE ctermfg=240 cterm=NONE
hi Comment ctermbg=NONE ctermfg=240 cterm=NONE
hi Constant ctermbg=NONE ctermfg=251 cterm=italic
hi Directory ctermbg=NONE ctermfg=NONE cterm=NONE
hi Error ctermbg=NONE ctermfg=NONE cterm=NONE
hi ErrorMsg ctermbg=NONE ctermfg=196 cterm=NONE
hi Folded ctermbg=NONE ctermfg=246 cterm=inverse
hi Identifier ctermbg=NONE ctermfg=NONE cterm=NONE
hi Identifier ctermbg=NONE ctermfg=NONE cterm=NONE
hi Ignore ctermbg=NONE ctermfg=NONE cterm=NONE
hi IncSearch ctermbg=NONE ctermfg=251 cterm=inverse
hi MatchParen ctermbg=NONE ctermfg=202 cterm=bold
hi NonText ctermbg=NONE ctermfg=NONE cterm=NONE
hi Normal ctermbg=NONE ctermfg=NONE cterm=NONE
hi Pmenu ctermbg=NONE ctermfg=251 cterm=inverse
hi PmenuSel ctermbg=NONE ctermfg=251 cterm=bold
hi PreProc ctermbg=NONE ctermfg=251 cterm=NONE
hi Search ctermbg=NONE ctermfg=251 cterm=inverse
hi SignColumn ctermbg=NONE ctermfg=NONE cterm=NONE
hi Special ctermbg=NONE ctermfg=NONE cterm=NONE
hi SpecialComment ctermbg=NONE ctermfg=NONE cterm=NONE
hi SpecialKey ctermbg=NONE ctermfg=239 cterm=NONE
hi Statement ctermbg=NONE ctermfg=251 cterm=NONE
hi Statement ctermbg=NONE ctermfg=NONE cterm=NONE
hi String ctermbg=NONE ctermfg=251 cterm=NONE
hi TODO ctermbg=NONE ctermfg=246 cterm=italic
hi TabLine ctermbg=NONE ctermfg=240 cterm=NONE
hi TabLineFill ctermbg=NONE ctermfg=240 cterm=NONE
hi TabLineSel ctermbg=NONE ctermfg=249 cterm=NONE
hi Title ctermbg=NONE ctermfg=246 cterm=bold
hi Type ctermbg=NONE ctermfg=NONE cterm=NONE
hi Underlined ctermbg=NONE ctermfg=251 cterm=underline
hi VisualNOS ctermbg=NONE ctermfg=246 cterm=NONE
hi WarningMsg ctermbg=NONE ctermfg=NONE cterm=NONE
hi Wildmenu ctermbg=NONE ctermfg=NONE cterm=NONE
" VIMDIFF COLORS
hi DiffAdd ctermbg=22 ctermfg=NONE cterm=NONE
hi DiffDelete ctermbg=234 ctermfg=NONE cterm=NONE
hi DiffChange ctermbg=234 ctermfg=NONE cterm=NONE
hi DiffText ctermbg=NONE ctermfg=NONE cterm=NONE
" SPLIT AND FOLD COLORS
hi VertSplit ctermbg=NONE ctermfg=246 cterm=NONE
hi FoldColumn ctermbg=NONE ctermfg=251 cterm=NONE
hi Folded ctermbg=233 ctermfg=251 cterm=NONE
" SPELL COLOR
hi SpellBad ctermbg=52 ctermfg=NONE
hi SpellCap ctermbg=22 ctermfg=NONE cterm=NONE
hi SpellRare ctermbg=130 ctermfg=NONE
" C+PgUp/PgDown
nnoremap gn :next<CR>
nnoremap gp :prev<CR>
" NAVIGATE ON VISUAL LINES (SOFT WRAP)
imap <silent> <Down> <C-o> gj
imap <silent> <Up> <C-o> gk
nmap <silent> <Down> gj
nmap <silent> <Up> gk
" USE ARROW / VIM KEYS INSIDE OMNIBOX
inoremap <expr> j pumvisible() ? '<C-n>' : 'j'
inoremap <expr> k pumvisible() ? '<C-p>' : 'k'
inoremap <expr> <Down> pumvisible() ? '<C-n>' : '<Down>'
inoremap <expr> <Up> pumvisible() ? '<C-p>' : '<Up>'
" NETRW
let g:netrw_banner = 0
let g:netrw_browse_split = 3
let g:netrw_liststyle = 3
let g:netrw_ctags = "ectags"
let g:netrw_silent = 1
let g:netrw_sftp_cmd = "sftp -q"
let g:netrw_scp_cmd = "scp -q"
" STATUSLINE, AIRLINE/POWERLINE IS FOR NOOBS
set statusline=%#VisualNOS#
set statusline+=%F\ %{&filetype}
set statusline+=%=
set statusline+=%m%r%h%w%q
set statusline+=\ %{&fileformat}/%{&fileencoding?&fileencoding:&encoding}
set statusline+=\ dec:%b\ hex:%B
" set statusline+=\ count:%{(mode()=='V')?wordcount().visual_words:wordcount().words}w
" set statusline+=/%{(mode()=='V')?wordcount().visual_chars:wordcount().chars}c
set statusline+=\ line:%l\ col:%c
set statusline+=\ %p%%
set statusline+=\
" ITALIC FIX
set t_ZH=
set t_ZR=
set wildmode=full
" OPEN FILE
" nnoremap <C-t> :Texplore<CR>
nnoremap <C-t> :Files<CR>
inoremap <C-t> <ESC>:Files<CR>
" TAGS FILE
set tags="~/.dev/tags"
nnoremap gt :cs find 1 <C-R>=expand("<cword>")<CR><CR>
nnoremap gs :cs find 4 <C-R>=expand("<cword>")<CR><CR>
nnoremap gb <c-o>
nnoremap gh :FSHere<CR>
nnoremap oo :browse oldfiles<CR>
nnoremap XX :qall!<CR>
" PLUGIN: TAGBAR
nmap <F12> :TagbarToggle<CR>
let g:tagbar_ctags_bin = "ectags"
" PLUGIN: EASY ALIGN
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)
" Compile Stuff
nnoremap mm :call MyMake()<CR>
nnoremap mr :!clear && %:p:r<CR>
function MyMake()
:silent !clear
if filereadable("Makefile")
:w! | !make
else
:w! | !cc -Wall -g -O0 -o %:p:r -lsndio %:p
endif
endfunction
" CUSTOM: NO CLUTTER PASTE MODE
nnoremap <silent> <Tab> :call TogglePaste()<CR>
let g:paste=0
function! TogglePaste()
if (g:paste == 0)
:set paste nolist nonumber |
\ echo "-- PASTE --"
let g:paste=1
else
:set nopaste list number |
\ echo "-- NOPASTE --"
let g:paste=0
endif
endfunction
" CUSTOM: COPY ACROSS VIM INSTANCES
vnoremap vy :call VisualYank()<CR>
nnoremap vp :call VisualPaste()<CR>
let s:temp_file_path = $HOME . '/.cache/vim-snap'
function! VisualYank()
call writefile(getline(getpos("'<")[1],
\ getpos("'>")[1]), s:temp_file_path)
endfunction
function! VisualPaste()
let file_msg = readfile(s:temp_file_path)
call append(line("."), file_msg)
endfunction
" CUSTOM: HTMLENCODE WITHOUT PRE
function! BlogEncode()
:%s/>/\&gt;/g | %s/</\&lt;/g | %s/&lt;pre&gt;/<pre>/g | %s/&lt;\/pre&gt;/<\/pre>/g
endfunction
augroup mystuff
au!
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
@ -292,3 +95,284 @@ augroup mystuff
au BufRead,BufNewFile Makefile,/usr/src/*.c,/usr/src/*.h,*.gmk setl sw=8 sts=8 noet
au BufWritePost vimrc so ~/.vim/vimrc
augroup end
" set autochdir
" set shm+=I
" set path+=.,**
" set mouse=v
" set laststatus=2
" set backspace=indent,eol,start
"
" set nonumber
" set cursorline
" set scrolloff=3
" set spelllang=de,en
"
" syntax off
" filetype on
"
" set spelllang=de,en
" let mapleader = ","
"
" " * and # are only highlighting
" " n searches in the direction of * or #
" " nnoremap * *``
" " nnoremap # #``
" " nnoremap n <S-n>
"
" " SMOOTH SCROLLING
" set t_TI=[4?h
" set t_TE=[4?l
"
" " INDENTATION
" set noautoindent
" set nosmartindent
" set nocindent
"
" " DIFF
" set formatoptions=crolj
"
" " SEARCH
" set hlsearch
" set ignorecase
" set smartcase
"
" " SPACES (TABS)
" set tabstop=8
" set shiftwidth=4
" let &softtabstop=&shiftwidth
"
" set expandtab
" set smarttab
"
" set textwidth=72
" " set colorcolumn=72
" set formatprg=par\ -w72q
"
" set list
" set listchars=tab:>_,trail:>
" set fillchars=vert:\|,eob:\
"
" set showcmd
" set clipboard=unnamedplus
"
" " C specific highlighting
" let c_space_errors=1
" let c_gnu=1
" let c_comment_strings=1
" let c_curly_error=1
" "set makeprg=cc\ -o\ %:r\ %
" set autowrite
"
" " TEMPORARY FILES
" set undofile
" set undodir=~/.local/vim/undo//
" set backup
" set backupcopy=yes
" set backupdir=~/.local/vim/backup//
" set directory=~/.local/vim/swapfiles//
" set updatetime=2000
" set updatecount=100
" silent execute '!mkdir -p ~/.local/vim/backup ~/.local/vim/undo ~/.local/vim/swapfiles'
"
" " TAB LINE
" set tabline=%!Tabline()
" function! Tabline() abort
" let l:line = ''
" for l:i in range(1, tabpagenr('$'))
" if l:i == tabpagenr()
" let l:line .= '%#TabLineSel#'
" else
" let l:line .= '%#TabLine#'
" endif
" let l:label = fnamemodify(
" \ bufname(tabpagebuflist(l:i)[tabpagewinnr(l:i) - 1]), ':t' )
" let l:line .= ' ' . l:label . ' '
" endfor
" let l:line .= '%#TabLineFill#'
" return l:line
" endfunction
"
" " CREATE DIRECTORIES
" silent execute 'cs add ~/.dev/cscope.out'
" set csprg=cscope\ -C
" set cst
" set cspc=9
"
" " LOOK N FEEL
" set t_Co=256
" set t_ut=
" let g:is_posix=1
"
" set background=dark
" colorscheme lucius
"
"
"
" " " MY THEME
" " hi ColorColumn ctermbg=234 ctermfg=249 cterm=NONE
" " hi CursorLine ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi CursorLineNr ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi LineNr ctermbg=NONE ctermfg=240 cterm=NONE
" " hi Comment ctermbg=NONE ctermfg=240 cterm=NONE
" " hi Constant ctermbg=NONE ctermfg=251 cterm=italic
" " hi Directory ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Error ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi ErrorMsg ctermbg=NONE ctermfg=196 cterm=NONE
" " hi Folded ctermbg=NONE ctermfg=246 cterm=inverse
" " hi Identifier ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Identifier ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Ignore ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi IncSearch ctermbg=NONE ctermfg=251 cterm=inverse
" " hi MatchParen ctermbg=NONE ctermfg=202 cterm=bold
" " hi NonText ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Normal ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Pmenu ctermbg=NONE ctermfg=251 cterm=inverse
" " hi PmenuSel ctermbg=NONE ctermfg=251 cterm=bold
" " hi PreProc ctermbg=NONE ctermfg=251 cterm=NONE
" " hi Search ctermbg=NONE ctermfg=251 cterm=inverse
" " hi SignColumn ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Special ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi SpecialComment ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi SpecialKey ctermbg=NONE ctermfg=239 cterm=NONE
" " hi Statement ctermbg=NONE ctermfg=251 cterm=NONE
" " hi Statement ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi String ctermbg=NONE ctermfg=251 cterm=NONE
" " hi TODO ctermbg=NONE ctermfg=246 cterm=italic
" " hi TabLine ctermbg=NONE ctermfg=240 cterm=NONE
" " hi TabLineFill ctermbg=NONE ctermfg=240 cterm=NONE
" " hi TabLineSel ctermbg=NONE ctermfg=249 cterm=NONE
" " hi Title ctermbg=NONE ctermfg=246 cterm=bold
" " hi Type ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Underlined ctermbg=NONE ctermfg=251 cterm=underline
" " hi VisualNOS ctermbg=NONE ctermfg=246 cterm=NONE
" " hi WarningMsg ctermbg=NONE ctermfg=NONE cterm=NONE
" " hi Wildmenu ctermbg=NONE ctermfg=NONE cterm=NONE
"
" " VIMDIFF COLORS
" hi DiffAdd ctermbg=22 ctermfg=NONE cterm=NONE
" hi DiffDelete ctermbg=234 ctermfg=NONE cterm=NONE
" hi DiffChange ctermbg=234 ctermfg=NONE cterm=NONE
" hi DiffText ctermbg=NONE ctermfg=NONE cterm=NONE
"
" " SPLIT AND FOLD COLORS
" hi VertSplit ctermbg=NONE ctermfg=246 cterm=NONE
" hi FoldColumn ctermbg=NONE ctermfg=251 cterm=NONE
" hi Folded ctermbg=233 ctermfg=251 cterm=NONE
"
" " SPELL COLOR
" hi SpellBad ctermbg=52 ctermfg=NONE
" hi SpellCap ctermbg=22 ctermfg=NONE cterm=NONE
" hi SpellRare ctermbg=130 ctermfg=NONE
"
" " C+PgUp/PgDown
" nnoremap gn :next<CR>
" nnoremap gp :prev<CR>
"
" " NAVIGATE ON VISUAL LINES (SOFT WRAP)
" imap <silent> <Down> <C-o> gj
" imap <silent> <Up> <C-o> gk
" nmap <silent> <Down> gj
" nmap <silent> <Up> gk
"
" " USE ARROW / VIM KEYS INSIDE OMNIBOX
" inoremap <expr> j pumvisible() ? '<C-n>' : 'j'
" inoremap <expr> k pumvisible() ? '<C-p>' : 'k'
" inoremap <expr> <Down> pumvisible() ? '<C-n>' : '<Down>'
" inoremap <expr> <Up> pumvisible() ? '<C-p>' : '<Up>'
"
" " NETRW
" let g:netrw_banner = 0
" let g:netrw_browse_split = 3
" let g:netrw_liststyle = 3
" let g:netrw_ctags = "ectags"
" let g:netrw_silent = 1
" let g:netrw_sftp_cmd = "sftp -q"
" let g:netrw_scp_cmd = "scp -q"
"
" " " STATUSLINE, AIRLINE/POWERLINE IS FOR NOOBS
" " set statusline=%#VisualNOS#
" " set statusline+=%F\ %{&filetype}
" " set statusline+=%=
" " set statusline+=%m%r%h%w%q
" " set statusline+=\ %{&fileformat}/%{&fileencoding?&fileencoding:&encoding}
" " set statusline+=\ dec:%b\ hex:%B
" " " set statusline+=\ count:%{(mode()=='V')?wordcount().visual_words:wordcount().words}w
" " " set statusline+=/%{(mode()=='V')?wordcount().visual_chars:wordcount().chars}c
" " set statusline+=\ line:%l\ col:%c
" " set statusline+=\ %p%%
" " set statusline+=\
" "
" " " ITALIC FIX
" " set t_ZH=
" " set t_ZR=
"
"
" " OPEN FILE
" " nnoremap <C-t> :Texplore<CR>
" nnoremap <C-t> :Files<CR>
" inoremap <C-t> <ESC>:Files<CR>
"
" " TAGS FILE
" set tags="~/.dev/tags"
" nnoremap gt :cs find 1 <C-R>=expand("<cword>")<CR><CR>
" nnoremap gs :cs find 4 <C-R>=expand("<cword>")<CR><CR>
" nnoremap gb <c-o>
" nnoremap gh :FSHere<CR>
"
" nnoremap oo :browse oldfiles<CR>
" nnoremap XX :qall!<CR>
"
" " PLUGIN: TAGBAR
" nmap <F12> :TagbarToggle<CR>
" let g:tagbar_ctags_bin = "ectags"
"
" " PLUGIN: EASY ALIGN
" xmap ga <Plug>(EasyAlign)
" nmap ga <Plug>(EasyAlign)
"
" " Compile Stuff
" nnoremap mm :call MyMake()<CR>
" nnoremap mr :!clear && %:p:r<CR>
" function MyMake()
" :silent !clear
" if filereadable("Makefile")
" :w! | !make
" else
" :w! | !cc -Wall -g -O0 -o %:p:r -lsndio %:p
" endif
" endfunction
"
" " CUSTOM: NO CLUTTER PASTE MODE
" nnoremap <silent> <Tab> :call TogglePaste()<CR>
" let g:paste=0
" function! TogglePaste()
" if (g:paste == 0)
" :set paste nolist nonumber |
" \ echo "-- PASTE --"
" let g:paste=1
" else
" :set nopaste list number |
" \ echo "-- NOPASTE --"
" let g:paste=0
" endif
" endfunction
"
" " CUSTOM: COPY ACROSS VIM INSTANCES
" vnoremap vy :call VisualYank()<CR>
" nnoremap vp :call VisualPaste()<CR>
" let s:temp_file_path = $HOME . '/.cache/vim-snap'
" function! VisualYank()
" call writefile(getline(getpos("'<")[1],
" \ getpos("'>")[1]), s:temp_file_path)
" endfunction
" function! VisualPaste()
" let file_msg = readfile(s:temp_file_path)
" call append(line("."), file_msg)
" endfunction
"
" " CUSTOM: HTMLENCODE WITHOUT PRE
" function! BlogEncode()
" :%s/>/\&gt;/g | %s/</\&lt;/g | %s/&lt;pre&gt;/<pre>/g | %s/&lt;\/pre&gt;/<\/pre>/g
" endfunction