practicalli/neovim-config-redux is now archived project.
Practicalli Neovim book was updated to use the AstroNvim configuration for Neovim, providing a wide range of plugins with a highly flexible configuration via the Lazy Package plugin manager.
The author of Aniseed is making a significant change to how Fennel is used and creating the nfnl project. A new fennel based configuration may be created in the future to replace this project (although it woud be a huge investment to replicate everything that AstroNvim provides).
A Fennel configuration for Neovim 0.8.0 or greater, with a focus on Clojure REPL driven development with Conjure as well as general development workflow. A complete configuration to transform your Neovim in a simple, powerful and fun to use Clojure IDE
The key bindings (mappings) are evolving and trying to follow a Spacemacs style mnemonic approach (SPC f f
to open a file browser). A which-key text menu is also provided to help discover key bindings. Using mnemonic keybinding will make Neovim more accessible to Spacemacs users (like myself) and those less familiar with the ways of interacting with a Vim editor, i.e. the :
commands approach.
Practicalli Neovim book uses this configuration as it describes using Neovim, there is also (WIP) a description of this configuration in more detail.
This project owes it existence to the contributions and guidance of rafaeldelboni and the amazing work on Aniseed and Conjure by Olical
Support has also been provided in the #vim channel of the Clojurians Slack community.
Ubuntu Neovim 0.8.0 Install: use
*.deb
file from Neovim releases page on GitHub
Move $HOME/.config/nvim
if you have an existing Neovim configuration
mv $HOME/.config/nvim $HOME/backup/nvim
Clone the repository to the $HOME/.config/nvim
directory
git clone git@github.com:practicalli/neovim-config-redux.git $HOME/.config/nvim
Run nvim
without opening any files and press RTN
at the warning message.
When starting nvim
for the first time, the download packer and aniseed plugins are downloaded and some errors occur as there are more packages to download using the Packer tool.
In Neovim, press :
and type PackerInstall
(or type Pack
and press TAB
to cycle through the menu of completions).
RET
will run :PackerInstall, opening a new window (split) showing the progress of the install.
All the plugins declared in fnl/config/plugin.fnl
should be installed
:q!
to close neovim and use the nvim
command open Neovim again, hopefully without errors this time.
Should errors persist, try
:PackerUpdate
in neovim and quit / restart.
+
to expand, -
to contract:help gruvbox-material.txt
Supporting plugins
nvim-neorg/neorg - a variation on org mode for neovim - neovim 0.8.* required
mfussenegger/nvim-dap Debug Adapter Protocol client - neovim 8.0 required
https://github.com/VonHeikemen/lsp-zero.nvim - simplify use of nvim-cmp and LSP config, install language servers using https://github.com/williamboman/mason.nvim
https://github.com/williamboman/mason.nvim - package manger for external editor tools, e.g. LSP & DAP servers, linters, formatters,
https://github.com/cappyzawa/trim.nvim - trim whitespace
ms-jpq/chadtree - file manager
leap.nvim - general purpose motions for moving around the visible area of buffers
https://github.com/cappyzawa/trim.nvim - trim whitespace
https://github.com/gbprod/yanky.nvim#%EF%B8%8F-yank-ring - cycle through kill ring (and other stuff)
ggandor/leap.nvim motions (replacement for lightspeed), alternative to easy-motions ??
kevinhwang91/rnvimr ranger in a floating window
dadbod.vim interact with database - connect :DB postgresql:///connection-string
or run a single expression
vim-dadbob-ui - navigate database connections and save queries
heroku.vim wraps the Heroku CLI and provides tab complete of commands
p00f/nvim-ts-rainbow treesitter based rainbow parens
https://github.com/ruifm/gitlinker.nvim share github links
nvim
runs Neovim on the command line and if no files are given as arguments then the startup dashboard is displayed, providing easy access to previously opened files and other common actions.
Telescope and project plugin
TODO: configure telescope to respect the global gitignore patterns
Project key bindings - https://github.com/nvim-telescope/telescope-project.nvim#default-mappings-normal-mode
commentary.vim toggles a comment for lines, visual selections or for motions
gcc
comment current line, 4gcc
comment current line and next 4 lines
gc
comment region or use with motion e.g. gcap
comment paragraph,
gc in operator pending mode to target a comment TODO:
what is operator pending mode
:7,17Commentary
comment a range
:g/TODO/Commentary
as part of a :global invocation
gcgc
removes comments from a set of adjacent commented lines.
Neogit provides a Magit style client.
fugitive package provides a command line experience (no keybinding)
<leader>gs
opens Git Status, by running :Neogit
Other commands to map
:Neogit kind=<kind> " override kind
:Neogit cwd=<cwd> " override cwd
:Neogit commit" open commit popup
Work with GitHub issues and Pull Requests from the comfort of Neovim.
Requires the GitHub CLI for authentication to GitHub, using a developer personal access token that should be added to your GitHub account
TODO: Review Octo.nvim configuration settings
Command line form: Octo <object> <action> [arguments]
- Object, Action and Arguments commands
List issues from current project (optionally add a specific repository)
:Octo issue list
Create a pull requests from current project
:Octo pr create
Add a comment to the current topic (issue/pr)
:Octo comment add
:Octo gist list
Wrapper responsible for two things:
fnl/config/init.fnl
.In this file among other settings I do set the leader key as
space
and local-leader as,
for the sake of the examples of how use this configuration I will use this as basis for the commands.
Here we define the plugins we want packer to download and load for us, we define here a private function called use
which will search in the plugin map for the keyword :mod
and load the namespace defined in its value.
For example in the line we define that we need telescope we have this map:
:nvim-telescope/telescope.nvim
{:requires [:nvim-lua/popup.nvim
:nvim-lua/plenary.nvim]
:mod :telescope}
This will state to packer download nvim-telescope/telescope.nvim
and all the required plugins in :requires
and search for the namespace telescope
in file located in the following path fnl/config/plugin/telescope
, where I usually add plugin specific configuration like keymaps and settings.
Conjure specifics settings, I like to remap the doc work keymap to be <localleader>K
instead the only K
, to not conflict with the LSP docs K
.
Settings like ignore node_modules
and everything in .gitignore
to be listed in the file finder.
Keymaps:
<leader>pf
open the find files<leader>p/
open the fuzzy finder<leader>bb
open the find open buffer<leader>h/
open the nvim help fuzzy finderSettings to select which treesitter's features we want enabled and which language extension we want to ensure they will be always installed.
All about nvim's lsp settings and keymaps.
gd
Go to definitionK
Show documentations<leader>ld
Function declarations<leader>lt
Type Definitions<leader>lh
Signature Help<leader>ln
Rename<leader>le
Show line diagnostics<leader>lq
Show all diagnostics information<leader>lf
Auto format<leader>lj
Go to next diagnostic<leader>lk
Go to previous diagnostic<leader>la
Open code actions menu (Using telescope plugin interface)<leader>la
Open code actions menu for the selected text in VISUAL mode (Using telescope plugin interface)<leader>lw
Open workspace diagnostics list (Using telescope plugin interface)<leader>lr
Show all references list for item under the cursor (Using telescope plugin interface)<leader>lr
Show all implementations list for item under the cursor (Using telescope plugin interface)Here settings of which sources we want to show up in the autocomple menu like (conjure, lsp, buffer) and some mapping to navigate in the menu.
This configuration uses the Neovim GitHub theme which gives 3 dark and 3 light themes to choose from. Individual colors and styles can be configured to change specific parts of the theme.
The light theme is used by default, with a softer background colour that is slightly red-shifted.
Options are specified in the theme.setup
function, where the option names are keywords and the values are strings, boolean or hash-map of more option keywords and values.
(theme.setup {:theme_style "light"
:colors {:bg "#f8f2e6"}
:comment_style "italic"})
The colors (Hex values) for each theme are in the github-nvim-theme/lua/github-theme/palette with the overal theme definition in github-nvim-theme/lua/github-theme/theme.lua
Settings for vim-sexp like enabling it for another lisp languages like Fennel and Jannet
Configure the status line (lualine) that shows at the bottom of Neovim, defining colors and elements that appear on that line.
The Neovim GitHub theme includes definitions to set the look of the status line.
<leader>ff
<leader>le
gd
K
/<leader>lh
<leader>lr
<leader>lf
<leader>la
<leader>la
<leader>ln
<localleader>er
<localleader>lv
<localleader>K
Please raise an issue for anything other than trivial changes
Creative Commons Attribution Share-Alike 4.0 International
:Telescope env
list all the environment variables on the operating system, type patters to narrow the list
:h
menu followed by feature name that help is needed for, e.g. :h conjure
<leader>h/
list and preview help via telescope
ve
select to end of word
Where is the neovim configuration?
:echo stdpath('config')
syntax highlight code block in markdown - built-in neovim
-- Give me some fenced codeblock goodness
g.markdown_fenced_languages = { "html", "javascript", "typescript", "css", "scss", "lua", "vim" }
Lets try this with some Clojure code
(def fish "I am a string")
(defn blah
"doc string"
[args]
(map inc args)
😈 cmd
+ ctrl
+ spc
in Kitty terminal brings up an emoji selector - is this emoji menu MacOS specific ? How to get this on Linux?