Neovim configuration optimised for academic research and scientific computing. Document processing: LaTeX (VimTeX, SyncTeX), Markdown (preview, Obsidian), Quarto (R/Python/Julia execution), Typst (preview). Scientific computing: Julia REPL (multi-threaded), Python LSP (pyright), R execution. Development: LSP (15+ languages via Mason), completion (blink.cmp with blink.lib), terminal integration, Git integration. Modular architecture. vim.pack plugin management. Neovim 0.12+ required.
- LaTeX: VimTeX, bidirectional SyncTeX (Skim)
- Markdown: Live preview, Obsidian integration
- Quarto: Code execution (R, Python, Julia)
- Typst: Preview (typst-preview), CLI compile/watch (
typst c/typst w)
- Julia: REPL integration, multi-threaded execution
- Python: LSP (pyright)
- R: Code execution, project management
- LSP: 15+ languages (Mason)
- Completion: blink.cmp (with blink.lib dependency)
- Terminal: Code block detection
- Git: GitSigns, LazyGit
- Package Manager:
- macOS: Homebrew (install here)
- Arch Linux: pacman (built-in) and yay/paru for AUR packages
- Neovim 0.12+ (required for vim.pack plugin management)
- Git
- Cargo (recommended: builds blink.cmp native fuzzy matcher from source)
- ripgrep, fd (for Telescope fuzzy finding)
- LaTeX:
- macOS: MacTeX or BasicTeX, Skim PDF viewer
- Arch Linux: texlive-most, Zathura PDF viewer
- Typst:
- macOS:
brew install typst - Arch Linux:
yay -S typst(AUR)
- macOS:
- Markdown: Node.js (for preview plugin)
- Julia: Julia 1.9+ with LanguageServer.jl
- Python: Python 3.8+ with pyright LSP
- R: R 4.0+ with languageserver package
See Installation Guide.
# Clone configuration
git clone https://github.com/SimonAB/process-nvim.git ~/.config/nvim
cd ~/.config/nvim
# First launch (plugins auto-install)
nvim
# Verify installation
nvimPlugins install automatically on first launch (vim.pack). Mason prompts for language server installation.
| Key | Action |
|---|---|
<leader>f |
Find files (Telescope) |
<leader>g |
Live grep in project |
<leader>R / <leader>Rf |
Find files (frecency) |
<leader>e |
Toggle file explorer |
<leader>w |
Save file |
| Key | Action |
|---|---|
<C-t> |
Toggle terminal (ToggleTerm open_mapping) |
<leader>Tt |
Terminal toggle (vertical, smart) |
<leader>Th/Tv/Tf |
Horizontal/Vertical/Float terminal |
| Key | Action |
|---|---|
<localleader>lv |
LaTeX forward search (VimTeX) |
<localleader>ll |
Compile LaTeX (VimTeX) |
<localleader>lb |
LuaLaTeX + Biber (custom terminal workflow) |
<localleader>tp–<localleader>tw |
Typst preview / sync / typst c / typst w |
<leader>Kp |
Markdown preview |
<leader>Qp |
Quarto preview |
| Key | Action |
|---|---|
<leader>Jrh/v/f |
Julia REPL (horizontal/vertical/float) |
<leader>Jp |
Project status |
<leader>Ji |
Instantiate project |
Julia REPLs launch with --threads=auto for parallel computing.
| Key | Action |
|---|---|
<leader>Yc |
Cycle themes |
<leader>YTp |
Theme picker (Telescope) |
<leader>YTs |
Show current theme |
See Keymaps Reference.
~/.config/nvim/
├── init.lua # Entry point
├── lua/
│ ├── config.lua # Editor settings
│ ├── keymaps-core.lua # Core keymaps (plugin-independent)
│ ├── keymaps-plugins.lua # Plugin keymaps (deferred)
│ ├── keymaps.lua # Compatibility wrapper (loads both)
│ ├── plugins.lua # Plugin definitions
│ ├── core/ # Core functionality
│ │ ├── theme-manager.lua
│ │ ├── plugin-manager.lua
│ │ └── theme-picker.lua
│ └── plugins/ # Plugin configurations
│ ├── blink-cmp.lua
│ ├── nvim-lspconfig.lua
│ ├── telescope.lua
│ ├── toggleterm-nvim.lua
│ └── vimtex.lua
├── docs/ # Documentation
└── scripts/ # Utility scripts
Edit lua/plugins.lua:
local plugins = {
{ src = "https://github.com/user/plugin", name = "plugin" },
}Add plugin-independent mappings to lua/keymaps-core.lua, and plugin-dependent mappings to
lua/keymaps-plugins.lua:
vim.keymap.set("n", "<leader>custom", ":CustomCommand<CR>",
{ desc = "Custom command" })Install language servers via Mason:
:Mason " Open Mason interface
<leader>MA " Install academic LSP servers
<leader>MR " Install all recommended servers:checkhealth " Diagnose Neovim health
:Mason " Check installed language servers
<leader>Ll " List active LSP servers
<leader>Lr " Restart LSPmacOS (Skim):
- Verify Skim preferences: Sync → Custom command
- Check script path: Use absolute path, no tilde (~)
- Debug log:
tail -f /tmp/inverse_search.log
Arch Linux (Zathura):
- VimTeX may configure this automatically
- If needed, configure in
~/.config/zathura/zathurarc:set synctex-editor-command "nvim --headless -c \"VimtexInverseSearch %{line} '%{input}'\"" - See Installation Guide for detailed setup
- Terminal mappings:
<leader>T[1,2,3]→<leader>T[h,v,f](consistency with Julia REPL) - Julia REPL:
--threads=autoenabled - File formatting: Single newline at end of file on save
- Obsidian:
<leader>Oppastes image, adds two newlines
See CHANGELOG for complete version history.
- Discoverability: Which-key integration
- Consistency: British spelling, logical keymap organisation
- Research workflows: Academic document preparation, scientific computing
- Maintainability: Modular architecture, documented code
Provided as-is for educational and personal use.
Note: Requires Neovim 0.12+ (vim.pack). Older versions: use lazy.nvim or packer.nvim.