rewrite readme a bit
This commit is contained in:
parent
3d70299722
commit
aed44987a3
1 changed files with 113 additions and 107 deletions
220
README.md
220
README.md
|
@ -3,78 +3,57 @@
|
||||||
[![GitHub release][1]][2] [![GitHub Release Date][3]][4]
|
[![GitHub release][1]][2] [![GitHub Release Date][3]][4]
|
||||||
![Github commits (since latest release)][5] ![license][6]
|
![Github commits (since latest release)][5] ![license][6]
|
||||||
|
|
||||||
**fzf.kak** is a plugin for [Kakoune][7] editor, that brings integration with [fzf][8] tool.
|
**fzf.kak** is a plugin for [Kakoune][7] editor, that provides integration with the [fzf][8] tool.
|
||||||
This plugin is being tested against Kakoune master branch.
|
There's also a limited support for [skim][9], which can be enabled by changing `fzf_implementation` option.
|
||||||
**fzf.kak** also supports [skim][9], which can be used via `fzf_implementation` option.
|
|
||||||
|
|
||||||
![showcase][10]
|
![showcase][10]
|
||||||
|
|
||||||
## Installation
|
|
||||||
### With [plug.kak][11] (recommended)
|
|
||||||
Recommended way to install is to use plug.kak plugin manager.
|
|
||||||
You can install **fzf.kak** by adding this to your `kakrc`:
|
|
||||||
|
|
||||||
```kak
|
## Installation
|
||||||
|
|
||||||
|
|
||||||
|
### With [plug.kak][11]
|
||||||
|
|
||||||
|
The recommended way to install **fzf.kak** is to use plug.kak plugin manager.
|
||||||
|
To install **fzf.kak** add this to the `kakrc`:
|
||||||
|
|
||||||
|
``` kak
|
||||||
plug "andreyorst/fzf.kak"
|
plug "andreyorst/fzf.kak"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then reload Kakoune config or restart Kakoune and run `:plug-install`.
|
Then reload the configuration file or restart Kakoune and run `:plug-install`.
|
||||||
Now you can proceed to the [configuration][23] section.
|
|
||||||
|
|
||||||
### Without plugin manager
|
### Without plugin manager
|
||||||
This plugin consists of several parts which are "modules", that provide different functions to plugin.
|
|
||||||
There's central module that must be loaded before any other module, named `fzf.kak`, so in order to properly load **fzf.kak** plugin, you need to source it in your `kakrc`.
|
|
||||||
|
|
||||||
```sh
|
This plugin consists of several parts which are referred here as "modules".
|
||||||
|
So, for plugin to work the base module must be loaded:
|
||||||
|
|
||||||
|
``` sh
|
||||||
source "/path/to/fzf.kak/rc/fzf.kak" # loading base fzf module
|
source "/path/to/fzf.kak/rc/fzf.kak" # loading base fzf module
|
||||||
```
|
```
|
||||||
|
|
||||||
This will load base `fzf` module, but It can't do anything on it's own.
|
This module doesn't do anything on it's own.
|
||||||
You can load only needed modules, to keep your configuration rather simple, or load every module if you need all plugin abilities:
|
Each module in the `modules` directory provides features that extend base `fzf` module with new commands and mappings.
|
||||||
|
Those can be loaded manually one by one the same way as the base module, or with the use of the `find` command:
|
||||||
|
|
||||||
```sh
|
``` sh
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-file.kak" # fzf file chooser
|
evaluate-commands %sh{
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-buffer.kak" # switching buffers with fzf
|
find -L "path/to/fzf.kak/modules/" -type f -name '*.kak' -exec printf 'source "%s"\n' {} \;
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-search.kak" # search within file contents
|
}
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-cd.kak" # change server's working directory
|
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-ctags.kak" # search for tag in your project ctags file
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The same principle is applied to handling different version control systems.
|
|
||||||
You need a base module for `fzf`, called `fzf-vcs.kak` and its sub-modules for each VCS.
|
|
||||||
There are plenty of version control systems, so modules come in handy.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
source "/path/to/fzf.kak/rc/modules/fzf-vcs.kak" # VCS base module
|
|
||||||
```
|
|
||||||
|
|
||||||
So if you never work with, say, GNU Bazaar, or Mercurial you can remove them from your configuration.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
source "/path/to/fzf.kak/rc/modules/VCS/fzf-bzr.kak" # GNU Bazaar support
|
|
||||||
source "/path/to/fzf.kak/rc/modules/VCS/fzf-git.kak" # Git support module
|
|
||||||
source "/path/to/fzf.kak/rc/modules/VCS/fzf-hg.kak" # Mercurial VCS
|
|
||||||
source "/path/to/fzf.kak/rc/modules/VCS/fzf-svn.kak" # Subversion module
|
|
||||||
```
|
|
||||||
|
|
||||||
Order of sourcing files should not matter, but it is preferable to source main script first, and then the modules.
|
|
||||||
This may look complex, but it makes plugin more versatile.
|
|
||||||
And plugin managers, like [plug.kak][11] for example, just does all those steps for you.
|
|
||||||
|
|
||||||
By the way, this structure makes it easy to extend plugin with new modules, and you [can add modules on your own][20]!
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
There's no default key binding to invoke `fzf`, but **fzf.kak** provides a `fzf-mode` command that can be mapped to preferred key.
|
|
||||||
You can set your own mapping to invoke `fzf-mode`:
|
**fzf.kak** provides a `fzf-mode` command that can be mapped to preferred key:
|
||||||
|
|
||||||
```kak
|
```kak
|
||||||
map global normal <c-p> ': fzf-mode<ret>'
|
map global normal <c-p> ': fzf-mode<ret>'
|
||||||
```
|
```
|
||||||
|
|
||||||
Note that space between colon and command is intentional and will strip this command from command history.
|
This will invoke the user mode, which contains mnemonic keybindings for each sub-module.
|
||||||
|
If all modules were loaded, the following mappings are available:
|
||||||
Each `fzf` module defines mnemonic mapping, like <kbd>f</kbd> for opening files, <kbd>t</kbd> for tags, <kbd>s</kbd> for search, and so on.
|
|
||||||
Available mappings:
|
|
||||||
|
|
||||||
- <kbd>b</kbd> - Select buffer.
|
- <kbd>b</kbd> - Select buffer.
|
||||||
- <kbd>c</kbd> - Switch server's working directory.
|
- <kbd>c</kbd> - Switch server's working directory.
|
||||||
|
@ -88,31 +67,40 @@ Available mappings:
|
||||||
- <kbd>p</kbd> - Project selector.
|
- <kbd>p</kbd> - Project selector.
|
||||||
- <kbd>Alt</kbd>+<kbd>p</kbd> - Project related commands.
|
- <kbd>Alt</kbd>+<kbd>p</kbd> - Project related commands.
|
||||||
|
|
||||||
So for example pressing <kbd>Ctrl</kbd>+<kbd>p</kbd> <kbd>f</kbd> will open `fzf` window, showing you all files from current directory recursively.
|
When Kakoune runs inside Tmux, **fzf.kak** will use bottom split to display `fzf` window.
|
||||||
|
Additional keybindings are also made available to open file in vertical or horizontal split.
|
||||||
|
Otherwise, the `terminal` command is being used to create new windows.
|
||||||
|
|
||||||
When Kakoune is being run in Tmux, **fzf.kak** will use bottom split to display `fzf`.
|
|
||||||
Additional keybindings are available to open file in vertical or horizontal split.
|
|
||||||
When Kakoune is used in plain terminal, the `terminal` command is being used to create new windows.
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
**fzf.kak** features a lot of settings via options that can be altered to change how **fzf.kak** behaves.
|
|
||||||
All settings belong to `fzf` module, so in order to change variable values use `defer "fzf %{ ... }"` if you're using **plug.kak**, and if not, use `hook global ModuleLoaded fzf %{ ... }`, or simply `require-module fzf` before configuring options.
|
|
||||||
Same goes for `fzf_vcs` module.
|
|
||||||
|
|
||||||
From now on I assume that you're using one of the methods listed above for all configurations below.
|
**fzf.kak** features a lot of settings via options that can be altered to change how **fzf.kak** behaves.
|
||||||
|
Each `.kak` file provides a Kakoune module, so any settings which alter variable values should be wrapped in `ModuleLoaded` hook.
|
||||||
|
See [plug.kak manual section for `defer`](https://github.com/andreyorst/plug.kak/tree/master#deferring-plugin-configuration) that explains how to do this when using plug.kak.
|
||||||
|
|
||||||
|
|
||||||
### Default query
|
### Default query
|
||||||
**fzf.kak** by default will use main selection as default query for fzf, if the selection more than 1 character long (because cursor is simply 1-char selection).
|
|
||||||
You can disable this behavior by setting `fzf_use_main_selection` to `false`.
|
| module | `fzf` |
|
||||||
|
|
||||||
|
By default main selection is used as the default query for `fzf`, but only if the selection more than 1 character long.
|
||||||
|
This can be disabled by setting `fzf_use_main_selection` to `false`.
|
||||||
|
|
||||||
|
|
||||||
### Windowing
|
### Windowing
|
||||||
If you're using Tmux, you do not have to worry about windowing, since fzf.kak automatically creates all needed Tmux splits and panes for you.
|
|
||||||
However in case you're not using Tmux, fzf.kak uses `fzf_terminal_command` option to call windowing command to create new windows.
|
| module | `fzf` |
|
||||||
|
|
||||||
|
When using Tmux fzf.kak automatically creates all needed Tmux splits and panes for you.
|
||||||
|
In other cases **fzf.kak** uses `fzf_terminal_command` option to call windowing command to create new windows.
|
||||||
By default it is set to use `terminal` alias: `terminal kak -c %val{session} -e "%arg{@}"`, but some terminals can provide other aliases or commands, like `terminal-tab` in Kitty.
|
By default it is set to use `terminal` alias: `terminal kak -c %val{session} -e "%arg{@}"`, but some terminals can provide other aliases or commands, like `terminal-tab` in Kitty.
|
||||||
You may want to edit this variable accordingly to your personal preferences.
|
|
||||||
|
|
||||||
### Mappings
|
### Mappings
|
||||||
You can define what keys to use in `fzf` window via these options:
|
|
||||||
|
| module | `fzf` |
|
||||||
|
|
||||||
|
Keys that are used in the `fzf` window can be configured with these options:
|
||||||
|
|
||||||
- `fzf_window_map` - mapping to perform an action in new window,
|
- `fzf_window_map` - mapping to perform an action in new window,
|
||||||
- `fzf_vertical_map` - mapping to perform an action in new vertical split (Tmux),
|
- `fzf_vertical_map` - mapping to perform an action in new vertical split (Tmux),
|
||||||
|
@ -120,45 +108,52 @@ You can define what keys to use in `fzf` window via these options:
|
||||||
|
|
||||||
These options should be set to work with fzf `--expect` parameter, so check out fzf documentation on this.
|
These options should be set to work with fzf `--expect` parameter, so check out fzf documentation on this.
|
||||||
|
|
||||||
|
|
||||||
### File command
|
### File command
|
||||||
You can configure what command to use to search for files, and it's arguments.
|
|
||||||
|
| module | `fzf-file` |
|
||||||
|
|
||||||
|
A command that is used to search for files and it's arguments can be configured by changing the value of `fzf_file_command` variable, that is available in the `fzf-file` module.
|
||||||
|
|
||||||
Supported tools are [GNU Find][12], [The Silver Searcher][13], [ripgrep][14], [fd][15].
|
Supported tools are [GNU Find][12], [The Silver Searcher][13], [ripgrep][14], [fd][15].
|
||||||
GNU find is used by default, but you can switch to another one.
|
Default set of arguments is provided for each of these searchers, only the name of the tool can be assigned to the `fzf_file_command` variable:
|
||||||
There are some default values for those, so you can just state the name of the tool:
|
|
||||||
|
|
||||||
```kak
|
```kak
|
||||||
set-option global fzf_file_command 'rg' # 'ag', 'fd', or 'find'
|
set-option global fzf_file_command 'rg' # 'ag', 'fd', or 'find'
|
||||||
```
|
```
|
||||||
|
|
||||||
Or if you don't like default arguments, which for `find` are `find -type f`, and would like to disable searching in, say `.svn` and `.git` directories you can set option like this:
|
Default arguments can be changing by setting the complete command to execute:
|
||||||
|
|
||||||
```kak
|
```kak
|
||||||
set-option global fzf_file_command "find . \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type f -print"
|
set-option global fzf_file_command "find . \( -path '*/.svn*' -o -path '*/.git*' \) -prune -o -type f -print"
|
||||||
```
|
```
|
||||||
|
|
||||||
This can give you the idea of how this plugin can be customized.
|
|
||||||
Most of **fzf.kak** modules provide settings for their commands, so you should check all `fzf-optionname` available in prompt mode.
|
|
||||||
All such options are well documented, so listing those in readme would make it unnecessary long.
|
|
||||||
|
|
||||||
### Preview
|
### Preview
|
||||||
**fzf.kak** tries to automatically detect where to show preview window, depending on aspect ratio of new terminal window.
|
|
||||||
|
| module | `fzf-file` |
|
||||||
|
|
||||||
|
**fzf.kak** tries to automatically detect where to show preview window, depending on aspect ratio of the new terminal window.
|
||||||
By default if the doubled height is bigger than the width, preview occupies upper 60% of space.
|
By default if the doubled height is bigger than the width, preview occupies upper 60% of space.
|
||||||
If height is smaller than the width, preview is shown at the right side.
|
If height is smaller than the width, preview is shown at the right side.
|
||||||
|
These amounts can be configured with `fzf_preview_height` and `fzf_preview_width` options.
|
||||||
You can configure the amount of space for preview window with these options: `fzf_preview_height` and `fzf_preview_width`.
|
|
||||||
|
|
||||||
When using **fzf.kak** inside `tmux`, bottom pane is used for all `fzf` commands, and preview window is displayed on the right side.
|
When using **fzf.kak** inside `tmux`, bottom pane is used for all `fzf` commands, and preview window is displayed on the right side.
|
||||||
When preview is turned on, height of `tmux` split is increased to provide more space.
|
When preview is turned on, height of `tmux` split is increased to provide more space.
|
||||||
You can configure split height with `fzf_preview_tmux_height`
|
Split height can be configured with the `fzf_preview_tmux_height` variable.
|
||||||
|
|
||||||
Amount of lines in preview window can be changed with `fzf_preview_lines` option.
|
Amount of lines in preview window can be changed with `fzf_preview_lines` option.
|
||||||
|
|
||||||
If you don't want preview feature you can disable it by setting `fzf_preview` option to `false`.
|
Preview feature can be disabled entirely by setting `fzf_preview` option to `false`.
|
||||||
|
|
||||||
|
|
||||||
#### Highlighting preview window
|
#### Highlighting preview window
|
||||||
You also can highlight contents of the file displayed within preview window.
|
|
||||||
To do so, you can specify which highlighter to use with `fzf_highlight_command` option.
|
| module | `fzf-file` |
|
||||||
Supported highlighters are:
|
|
||||||
|
Contents of the file displayed within preview window can be syntax highlighted.
|
||||||
|
This can be enabled by specifying highlighter to use with the `fzf_highlight_command` option.
|
||||||
|
These highlighters are are supported out of the box:
|
||||||
|
|
||||||
* [Bat][16]
|
* [Bat][16]
|
||||||
* [Coderay][17]
|
* [Coderay][17]
|
||||||
|
@ -167,13 +162,16 @@ Supported highlighters are:
|
||||||
|
|
||||||
Although other tools are not supported by the script, then should work fine as long as they work with `fzf`.
|
Although other tools are not supported by the script, then should work fine as long as they work with `fzf`.
|
||||||
|
|
||||||
### VCS
|
|
||||||
This script supports these version control systems: Git, Subversion, GNU Bazaar, and Mercurial.
|
|
||||||
By default <kbd>v</kbd> mapping from `fzf` mode will detect your version control system and open `fzf` window for you.
|
|
||||||
If you wish to explicitly use some particular VCS command, you can use <kbd>Alt</kbd>+<kbd>v</kbd> mapping, which includes all supported VCS shortcuts.
|
|
||||||
|
|
||||||
You also able to set parameters to VCS command to use to provide project files.
|
### VCS
|
||||||
Supported options:
|
|
||||||
|
| module | `fzf-vcs` |
|
||||||
|
|
||||||
|
This script supports these version control systems: Git, Subversion, GNU Bazaar, and Mercurial.
|
||||||
|
By default <kbd>v</kbd> mapping from `fzf` mode will detect your version control system automatically.
|
||||||
|
To explicitly use some particular VCS command, the <kbd>Alt</kbd>+<kbd>v</kbd> mapping can be used, which includes all supported VCS shortcuts.
|
||||||
|
|
||||||
|
To set parameters to VCS command used to provide project files the following options can be used:
|
||||||
|
|
||||||
* `fzf_git_command`
|
* `fzf_git_command`
|
||||||
* `fzf_svn_command`
|
* `fzf_svn_command`
|
||||||
|
@ -181,25 +179,34 @@ Supported options:
|
||||||
* `fzf_hg_command`
|
* `fzf_hg_command`
|
||||||
|
|
||||||
Other VCS are not supported officially.
|
Other VCS are not supported officially.
|
||||||
Open a feature request if you want some unsupported VCS to be included.
|
Feature requests and merge requests are welcome.
|
||||||
You also can change one of options to contain your VCS command, and use this command explicitly from VCS sub-mode.
|
|
||||||
|
|
||||||
### Tmux
|
### Tmux
|
||||||
When using inside Tmux, `fzf` will use bottom split.
|
|
||||||
Height of this split can be changed with `fzf_tmux_height` option.
|
| module | `fzf` |
|
||||||
`fzf_tmux_height_file_preview` option is used to control height of the split when you do file searching with file-preview turned on.
|
|
||||||
|
When running inside Tmux, `fzf` will use bottom split.
|
||||||
|
Height of this split can be changed with the `fzf_tmux_height` option.
|
||||||
|
`fzf_tmux_height_file_preview` option is used to control height of the split when file-preview is turned on.
|
||||||
|
|
||||||
|
|
||||||
### Projects
|
### Projects
|
||||||
**fzf.kak** can store and load your projects.
|
|
||||||
For that It creates a hidden file in your `%val{config}` called `.fzf-projects`.
|
| module | `fzf-project` |
|
||||||
You can change the location of this file and its name with `fzf_project_file` option.
|
|
||||||
You also can choose which method to use when storing projects.
|
**fzf.kak** has basic project manipulation capabilities.
|
||||||
You can either convert your `$HOME` to `~/` or use plain `$HOME` in your path.
|
|
||||||
This behavior is configured with `fzf_project_use_tilda` option, which accepts `true` and `false` values.
|
To store projects a hidden file is created in `%val{config}` and called `.fzf-projects`.
|
||||||
|
The location of this file and its name can be changed by modifying the `fzf_project_file` option.
|
||||||
|
By default project paths which start from home directory will use `~` instead of read path.
|
||||||
|
To change this, set `fzf_project_use_tilda` option to `false`.
|
||||||
|
|
||||||
|
|
||||||
## `fzf` command
|
## `fzf` command
|
||||||
|
|
||||||
`fzf` command can be used from prompt mode and for [scripting][20].
|
`fzf` command can be used from prompt mode and for [scripting][20].
|
||||||
It supports these arguments:
|
The following arguments are supported:
|
||||||
|
|
||||||
- `-kak-cmd`: A Kakoune command that is applied to `fzf` resulting value, e.g. `edit -existing`, `change-directory`, e.t.c.
|
- `-kak-cmd`: A Kakoune command that is applied to `fzf` resulting value, e.g. `edit -existing`, `change-directory`, e.t.c.
|
||||||
- `-multiple-cmd`: A Kakoune command that is applied when multiple items selected to every item but the first one.
|
- `-multiple-cmd`: A Kakoune command that is applied when multiple items selected to every item but the first one.
|
||||||
|
@ -218,24 +225,23 @@ It supports these arguments:
|
||||||
See [fzf-search.kak][22] as example.
|
See [fzf-search.kak][22] as example.
|
||||||
- `-post-action`: Extra commands that are preformed after `-kak-cmd` command.
|
- `-post-action`: Extra commands that are preformed after `-kak-cmd` command.
|
||||||
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
Please do.
|
||||||
If you want to contribute to **fzf.kak** by adding a module, you can submit one by providing a pull request, or just open a feature request and we'll see what can be done.
|
If you want to contribute to **fzf.kak** by adding a module, you can submit one by providing a pull request, or just open a feature request and we'll see what can be done.
|
||||||
|
|
||||||
### Writing a module
|
The basic idea behind the module structure can be described as:
|
||||||
You can write a module for **fzf.kak**.
|
|
||||||
To create one, simply define a function in separate file, located in `rc/modules/`, and named after the function.
|
|
||||||
**fzf.kak** provides a general purpose command, that can be called with some Kakoune command as first parameter, and command that provides list of items for `fzf` as a second parameter.
|
|
||||||
Third optional parameter is for defining extra arguments for `fzf` itself, like additional keybindings.
|
|
||||||
|
|
||||||
Overall module structure is:
|
1. Provide a user module;
|
||||||
* Define a `fzf-command` command
|
2. Define a command that calls `fzf` function with appropriate arguments;
|
||||||
* Prepare list of items for `fzf`, or define an item command
|
3. Create a mapping in a `ModuleLoaded` hook, that requires new module, and calls the command.
|
||||||
* call `fzf` command and pass needed arguments to it.
|
|
||||||
|
See how existing modules are implemented to understand the idea of how modules are constructed.
|
||||||
|
|
||||||
Of course modules can and will be more complex, since a good module checks if command for providing item list is available on user's machine, and supports various settings inside it.
|
|
||||||
Feel free to look how existing modules are made.
|
|
||||||
|
|
||||||
### External modules
|
### External modules
|
||||||
|
|
||||||
Support for [yank-ring.kak][25] was externalized to separate plugin [fzf-yank-ring.kak][24]
|
Support for [yank-ring.kak][25] was externalized to separate plugin [fzf-yank-ring.kak][24]
|
||||||
|
|
||||||
[1]: https://img.shields.io/github/release/andreyorst/fzf.kak.svg
|
[1]: https://img.shields.io/github/release/andreyorst/fzf.kak.svg
|
||||||
|
|
Loading…
Reference in a new issue