Giter Site home page Giter Site logo

rogererens / neovim-config-redux Goto Github PK

View Code? Open in Web Editor NEW

This project forked from practicalli/neovim-config-redux

0.0 1.0 0.0 104 KB

A Fennel based configuration for Neovim (0.8.0 onward), aimed mainly at Clojure developers

Lua 1.84% Fennel 98.16%

neovim-config-redux's Introduction

Practicalli Neovim Configuration

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.

Derived work

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.

Prerequisites

Ubuntu Neovim 0.8.0 Install: use *.deb file from Neovim releases page on GitHub

How to use

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 [email protected]: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.

Plugins

themes

Supporting plugins

Telescope extensions to try

Neovim configurations

Plugin Not used

Using Neovim

Starting Neovim

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.

Neovim startup plugin with dashboard theme

Projects and files

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

Comments

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.

Version Control

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

GitHub interaction

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

Files

Wrapper responsible for two things:

  • Download and setup our package manager (packer.nvim) and our fennel helper/interface (aniseed)
  • Set the entrypoint for NVIM read our config files, in our case fnl/config/init.fnl.
  • Set basic global vim configurations and general keymaps.
  • Load plugin configuration namespace.

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 finder

Settings 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.

LSP Configuration

  • In the first session, we define which symbols to show for lsp diagnostics.
  • Later we describe which features and server settings we want to enable/customize.
    • Handler defines features and how we want to render the server outputs.
    • Capabilities we link with our autocompletion plugin (nvim-cmp), to say to the lsp servers that we have this feature enabled.
    • On_Attach we customize our interaction with the LSP server, here we define the following keymaps:
      • gd Go to definition
      • K 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)
  • Lastly we configure to use all settings above in clojure-lsp server instance.

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.

Neovim in action

Telescope - Find Files

telescope-find-files <leader>ff

Lsp - Syntax check

lsp-syntax-check <leader>le

Lsp - Go to definition

lsp-go-to-definition gd

Lsp - Document/Signature Help

lsp-document K/<leader>lh

Lsp - Find definition/references

lsp-find-references <leader>lr

Lsp - Formatting

lsp-format <leader>lf

Lsp - Code actions

lsp-code-actions <leader>la

Lsp - Refactorings

lsp-refactorings <leader>la

Lsp - Rename

lsp-rename <leader>ln

Conjure - Eval

conjure-eval <localleader>er

Conjure - Repl

conjure-repl <localleader>lv

Conjure - Document

conjure-document <localleader>K

Completion

auto-complete

Contributing

Please raise an issue for anything other than trivial changes

License

Creative Commons Attribution Share-Alike 4.0 International

Environment variables

:Telescope env list all the environment variables on the operating system, type patters to narrow the list

Getting help

:h menu followed by feature name that help is needed for, e.g. :h conjure

<leader>h/ list and preview help via telescope

Visual select tips

ve select to end of word

Where is...

Where is the neovim configuration?

:echo stdpath('config')

Configuration to try

syntax highlight code block in markdown - built-in neovim

  • does this actually need setting in neovim - some basic highlighting already happens without it.
-- 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?

neovim-config-redux's People

Contributors

practicalli-johnny avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.