Compare commits
No commits in common. "master" and "modern-restart" have entirely different histories.
master
...
modern-res
740 changed files with 5569 additions and 2666 deletions
6
.github/copilot-instructions.md
vendored
6
.github/copilot-instructions.md
vendored
|
|
@ -6,7 +6,8 @@ This file exists to satisfy GitHub Copilot's convention of looking for instructi
|
|||
|
||||
## Quick Reference
|
||||
|
||||
- **Primary instructions**: See `AGENTS.md`
|
||||
- **Primary instructions**: See `/home/ray/.config/nvim/AGENTS.md`
|
||||
- **Migration plan**: See `MIGRATION_PLAN.md`
|
||||
- **Decision log**: See `LOG.md`
|
||||
- **Keymap reference**: See `README.md`
|
||||
|
||||
|
|
@ -14,8 +15,9 @@ This file exists to satisfy GitHub Copilot's convention of looking for instructi
|
|||
|
||||
1. **Read `AGENTS.md` first** - it contains all coding rules, architecture decisions, and what NOT to reintroduce
|
||||
2. **Update docs after changes**:
|
||||
- Config changes → update `MIGRATION_PLAN.md`
|
||||
- Decisions → update `LOG.md`
|
||||
- User-facing behavior and keymaps → update `README.md`
|
||||
- Keymap changes → update `README.md`
|
||||
3. **Modern Lua-first**: Use `vim.opt`, `vim.keymap.set`, `vim.api` - avoid Vimscript
|
||||
4. **LSP (Neovim 0.11+)**: Use `vim.lsp.config()` + `vim.lsp.enable()`, NOT lspconfig `.setup()`
|
||||
5. **Project config**: Native `exrc` + `secure`, no neoconf plugin
|
||||
|
|
|
|||
12
.gitignore
vendored
12
.gitignore
vendored
|
|
@ -1,3 +1,9 @@
|
|||
.nvimlog
|
||||
Session.vim
|
||||
nvim.log
|
||||
bundle/
|
||||
autoload/
|
||||
undodir/*
|
||||
.vimtmp/*
|
||||
view/*
|
||||
tmpdir
|
||||
WORKSPACE_TEST/
|
||||
EXTERNAL_TEST/
|
||||
WORKSPACE_SIMPLE/
|
||||
|
|
|
|||
250
AGENTS.md
250
AGENTS.md
|
|
@ -1,70 +1,208 @@
|
|||
# AGENTS: Neovim Configuration
|
||||
# AGENTS: Neovim Config Migration
|
||||
|
||||
Scope: the entire `~/.config/nvim` repository.
|
||||
Scope: applies to the entire `~/.config/nvim` directory tree.
|
||||
|
||||
## Current setup
|
||||
This repository is being migrated to a modern, minimal Neovim setup driven by Lua and lazy.nvim. Follow these rules when making changes.
|
||||
|
||||
This is the active, daily-use Neovim 0.12 configuration. It is Lua-first,
|
||||
managed with lazy.nvim, and intended to remain small, fast, and maintainable.
|
||||
## Goals
|
||||
- Modern Lua-first config; avoid Vimscript unless explicitly requested.
|
||||
- Keep it minimal, fast, and maintainable.
|
||||
- Base plugin management on `lazy.nvim` with modular plugin specs.
|
||||
- Support Telescope navigation, netrw for file browsing/preview, Oil.nvim for file operations, LSP, Treesitter, Copilot, and sane UX defaults.
|
||||
- Native project-local configuration via `exrc` + `secure` (no external config plugins).
|
||||
|
||||
The main workflows are:
|
||||
## Do Not Reintroduce
|
||||
- Custom Vimscript tabline/statusline, foldtext, UI hacks.
|
||||
- Legacy autocommands toggling cursorline/column per window.
|
||||
- CoC or CoC-specific config.
|
||||
- Neo-tree (skipped in favor of netrw for navigation).
|
||||
- Providers for ruby/perl/node (disable unless required by a plugin).
|
||||
- Auto-reload vimrc-on-write templates.
|
||||
- `cursorcolumn` and old folding logic not related to UFO.
|
||||
- neoconf plugin (incompatible with Neovim 0.11+, use native exrc instead).
|
||||
- Motion plugins like leap.nvim or flash.nvim (not needed).
|
||||
- Markdown rendering plugins (skipped entirely).
|
||||
|
||||
- netrw for tree browsing, previews, and file operations
|
||||
- Telescope for fuzzy files, grep, buffers, and symbols
|
||||
- native `vim.lsp.config()` / `vim.lsp.enable()` configuration
|
||||
- native insert-mode completion and snippets
|
||||
- Copilot inline suggestions, separate from the completion menu
|
||||
- Tree-sitter, Conform, nvim-lint, Gitsigns, and nvim-ufo
|
||||
- native `nvim.undotree`
|
||||
- project-local `.nvim.lua` files through native `exrc` + `secure`
|
||||
## Repository Structure (target)
|
||||
```
|
||||
~/.config/nvim/
|
||||
├── init.lua -- entrypoint; bootstraps lazy.nvim and loads Lua modules
|
||||
└── lua/
|
||||
├── settings.lua -- non-plugin options
|
||||
├── keymaps.lua -- non-plugin keymaps
|
||||
├── autocmds.lua -- non-plugin autocommands
|
||||
├── abbreviations.lua -- insert-mode abbreviations
|
||||
├── netrw-config.lua -- netrw configuration
|
||||
├── utils.lua -- helpers (only if needed)
|
||||
└── plugins/ -- one file per plugin or domain
|
||||
├── telescope.lua
|
||||
├── treesitter.lua
|
||||
├── cmp.lua
|
||||
├── lsp.lua
|
||||
├── copilot.lua
|
||||
├── oil.lua
|
||||
├── ufo.lua
|
||||
├── gitsigns.lua
|
||||
├── none-ls.lua
|
||||
├── nvim-lint.lua
|
||||
├── mason.lua
|
||||
├── mason-lspconfig.lua
|
||||
├── mason-tool-installer.lua
|
||||
├── comment.lua
|
||||
├── surround.lua
|
||||
├── autopairs.lua
|
||||
└── indent-blankline.lua
|
||||
├── after/
|
||||
│ ├── ftplugin/
|
||||
│ │ └── php.lua -- PHP-specific settings (includeexpr for gf)
|
||||
│ └── queries/ -- Custom Treesitter queries
|
||||
│ ├── css/
|
||||
│ │ └── highlights.scm
|
||||
│ └── html/
|
||||
│ └── highlights.scm
|
||||
├── templates/
|
||||
│ └── template.sh -- Shell script template
|
||||
└── legacy/ -- Archived Vimscript config (reference only)
|
||||
```
|
||||
|
||||
`README.md` documents the user-facing workflows and keymaps. `LOG.md` records
|
||||
architectural decisions.
|
||||
## Coding Conventions
|
||||
- Use Lua APIs: `vim.opt`, `vim.api.nvim_create_autocmd`, `vim.keymap.set`.
|
||||
- No inline Vimscript or `vim.cmd` blocks unless strictly necessary.
|
||||
- Keep plugin configuration self-contained in its plugin spec file.
|
||||
- Prefer small, readable modules and minimal configuration over heavy customization.
|
||||
- Keymaps: use `vim.keymap.set` with `{ silent = true, noremap = true }` defaults unless otherwise required.
|
||||
- Autocommands: group via `vim.api.nvim_create_augroup` and create specific, narrowly scoped autocmds.
|
||||
- Avoid global state; return tables from modules and plugin specs.
|
||||
|
||||
## Maintenance rules
|
||||
## Plugin Management (lazy.nvim)
|
||||
- Each plugin lives in `lua/plugins/<name>.lua` and returns a spec table.
|
||||
- Use `opts = {}` for default options and `config = function(_, opts) ... end` for setup.
|
||||
- Do not install any plugin not listed without explicit user confirmation (proposal and rationale are welcome).
|
||||
- Rejected: `folke/neoconf.nvim` (incompatible with Neovim 0.11+ vim.lsp.config API).
|
||||
|
||||
- Prefer Lua APIs such as `vim.opt`, `vim.keymap.set`, and
|
||||
`vim.api.nvim_create_autocmd`; use Vimscript only when a native integration
|
||||
requires it.
|
||||
- Keep non-plugin behavior in focused modules under `lua/`.
|
||||
- Keep each plugin specification self-contained under `lua/plugins/`.
|
||||
- Continue using lazy.nvim; do not mix plugin managers without an explicit
|
||||
decision to migrate.
|
||||
- Do not add a plugin without explicit user confirmation.
|
||||
- Keep netrw as the sole file explorer and Telescope as the fuzzy navigator.
|
||||
- Use Neovim's native completion rather than reintroducing nvim-cmp or LuaSnip.
|
||||
- Keep Copilot as inline suggestions rather than a completion-menu source.
|
||||
- Use the modern LSP API; do not restore legacy `lspconfig.setup()` calls or
|
||||
neoconf.
|
||||
- Preserve native project-local configuration through `exrc` + `secure`.
|
||||
- Keep providers for Ruby, Perl, and Node disabled unless an active plugin
|
||||
requires one.
|
||||
- Preserve the existing Lua tabline, but do not restore the old Vimscript
|
||||
tabline/statusline, foldtext, cursorline/column window hacks, CoC, Neo-tree,
|
||||
motion plugins, or Markdown rendering plugins unless the user explicitly
|
||||
revisits those decisions.
|
||||
- Preserve unrelated user changes and keep patches narrowly scoped.
|
||||
## Required Plugin Categories
|
||||
- Core: `nvim-lspconfig`, `nvim-cmp`, `cmp-nvim-lsp`, `cmp-buffer`, `cmp-path`, `LuaSnip`.
|
||||
- Navigation: `telescope.nvim` + `telescope-fzf-native.nvim`, `oil.nvim`.
|
||||
- Treesitter: `nvim-treesitter`, `nvim-treesitter-textobjects`, `nvim-ts-autotag`.
|
||||
- UX/Editing: `Comment.nvim`, `nvim-surround`, `nvim-autopairs`, `indent-blankline.nvim`, `nvim-ufo`, `undotree`.
|
||||
- Git: `gitsigns.nvim`.
|
||||
- Copilot: `copilot.lua`, `copilot-cmp`.
|
||||
- Formatting/Linting: `none-ls.nvim`, `nvim-lint`.
|
||||
- LSP Management: `mason.nvim`, `mason-lspconfig.nvim`, `mason-tool-installer.nvim`.
|
||||
|
||||
## Documentation and validation
|
||||
## Workflow Requirements to Preserve
|
||||
- Netrw for visual context and project structure browsing (tree view, preview splits).
|
||||
- Telescope for fuzzy finding (files, grep, buffers, LSP symbols).
|
||||
- Oil.nvim for file manipulation (handles buffer sync on rename/move/delete).
|
||||
- LSP for navigation (gd, gr, K, etc.).
|
||||
- Heavy HTML/PHP/JS/Markdown usage (WordPress plugin dev) — prioritize these languages in LSP/Treesitter.
|
||||
- Format-on-save with toggle capability.
|
||||
- Project-local configuration via `.nvim.lua` files.
|
||||
|
||||
- Update `README.md` whenever user-facing behavior or keymaps change.
|
||||
- Update its configuration section when formatter, linter, or tool resolution
|
||||
changes.
|
||||
- Record significant architectural decisions in `LOG.md`.
|
||||
- After configuration or plugin changes, run at least:
|
||||
## Behaviours to Keep (modernized)
|
||||
- Abbreviations: `adn→and`, `waht→what`, `tehn→then`, `functin→function`, `positin→position`.
|
||||
- Templates: auto-populate `.sh` from template.
|
||||
- Whitespace highlighting (use modern alternatives, e.g., `listchars`, plugins if needed).
|
||||
- Persistent folds (prefer `nvim-ufo`).
|
||||
- Spell & text: `spelllang=en_gb`, custom `listchars`, `showbreak`.
|
||||
- Keyword characters: `iskeyword+=$` (for PHP/shell variables), `iskeyword+=-` (for CSS/HTML/config files).
|
||||
|
||||
```bash
|
||||
nvim --headless -c 'lua print("Config loads")' -c 'quitall'
|
||||
```
|
||||
## Current Status (Phase 10 Complete)
|
||||
- ✅ Phase 1-2: Archive legacy, bootstrap lazy.nvim
|
||||
- ✅ Phase 3: Core editing & LSP (native exrc + vim.lsp.config migration complete)
|
||||
- ✅ Phase 4: Navigation (Telescope, netrw, Oil.nvim)
|
||||
- ✅ Phase 5: Treesitter (parsers, textobjects, autotag)
|
||||
- ✅ Phase 6: UX/Editing (Comment, surround, autopairs, indent guides, UFO, undotree)
|
||||
- ✅ Phase 7: Git integration (Gitsigns)
|
||||
- ✅ Phase 8: Copilot integration (copilot.lua + copilot-cmp)
|
||||
- ✅ Phase 9: Formatting & Linting (none-ls, nvim-lint, Mason tool installer)
|
||||
- ✅ Phase 10: Migrate kept behaviors (abbreviations, templates, custom Treesitter queries)
|
||||
- ⏸️ Phase 11: Cleanup & validation (pending)
|
||||
|
||||
- For relevant changes, also exercise the affected workflow interactively.
|
||||
## Migration Notes
|
||||
- Do not edit legacy Vimscript files except to extract settings to Lua. Keep them intact until migration completes.
|
||||
- Introduce `init.lua` and bootstrap `lazy.nvim` before adding plugins.
|
||||
- Disable unnecessary providers early: `vim.g.loaded_ruby_provider = 0`, etc.
|
||||
- Keep startup fast; avoid unnecessary autoloading or heavy defaults.
|
||||
- When cleaning, archive existing files into a `legacy/` folder within this config instead of deleting. Maintain a brief index if helpful.
|
||||
|
||||
## History
|
||||
## Validation
|
||||
- Ensure Neovim starts without errors and with minimal startup time.
|
||||
- Verify Telescope navigation, netrw browsing, Oil.nvim file operations, LSP basics, and completion.
|
||||
- Keep plugin count tight; remove anything unused.
|
||||
|
||||
This configuration began as a large Vimscript setup with bundled plugins and
|
||||
was incrementally rebuilt as a modern Lua configuration. The migration covered
|
||||
lazy.nvim, native LSP and project configuration, native completion and
|
||||
Undotree, Telescope, a netrw-centered explorer workflow, Tree-sitter, Copilot,
|
||||
formatting, linting, and the Paper Tonic colorscheme. After sustained daily use
|
||||
on Neovim 0.12.6, the migration was declared complete on 2026-10-28. The
|
||||
decision history remains in `LOG.md` and Git history.
|
||||
## Key Decisions & Architecture
|
||||
|
||||
### LSP Configuration
|
||||
- **Modern API (Neovim 0.11+)**: Uses `vim.lsp.config()` + `vim.lsp.enable()`, NOT `require('lspconfig')[server].setup()`
|
||||
- **Project-local config**: Native `exrc` + `secure` (no neoconf - incompatible with 0.11+)
|
||||
- **Config format**: `.nvim.lua` files return `{ lsp = { [server_name] = { settings = {...} } } }`
|
||||
- **Security**: `secure` mode prompts user to trust `.nvim.lua` files (one-time per file hash)
|
||||
- **Settings loading**: `on_new_config` hook loads from actual `root_dir` (not cwd)
|
||||
- **PHP**: intelephense with `single_file_support = false`, uses `environment.includePaths` for external libs
|
||||
|
||||
### Navigation Strategy
|
||||
- **netrw**: Visual context, tree view, preview splits (horizontal 50/50 below)
|
||||
- **Telescope**: Fuzzy finding (files, grep, buffers, LSP symbols)
|
||||
- **Oil.nvim**: File manipulation (handles buffer sync on rename/move/delete)
|
||||
- **PHP gf enhancement**: Custom `includeexpr` in `after/ftplugin/php.lua` for WordPress/PHP patterns
|
||||
|
||||
### Formatting & Linting
|
||||
- **Formatters**: prettier, phpcbf, stylua, black (project-local → Mason → global)
|
||||
- **Linters**: eslint_d, phpcs, markdownlint, ruff (via nvim-lint)
|
||||
- **Format-on-save**: Enabled by default, toggle with `<leader>lt`
|
||||
- **Philosophy**: Formatters are source of truth; Neovim settings match formatter rules per filetype
|
||||
|
||||
### Treesitter
|
||||
- **Parsers**: lua, vim, vimdoc, php, html, javascript, typescript, tsx, css, scss, json, markdown, bash, regex
|
||||
- **Features**: Incremental selection (CR/BS), textobjects (functions, classes, parameters), autotag
|
||||
- **Custom queries**: `after/queries/css/highlights.scm`, `after/queries/html/highlights.scm`
|
||||
|
||||
### Session Management
|
||||
- **Auto-load**: On `VimEnter`, loads `Session.vim` if it exists (unless files specified on command line)
|
||||
- **Auto-save**: On `VimLeavePre`, saves to `Session.vim` if it already exists
|
||||
- **Manual control**: Create with `:mksession` to enable; delete to disable
|
||||
- **Per-directory**: Sessions are opt-in and workspace-specific
|
||||
|
||||
## Developer Workflows
|
||||
|
||||
### Testing Changes
|
||||
```bash
|
||||
# Quick syntax check
|
||||
nvim --headless -c 'lua print("Config loads")' -c 'quitall'
|
||||
|
||||
# Check LSP status in test workspace
|
||||
cd ~/.config/nvim/WORKSPACE_TEST
|
||||
nvim site/external.php # Then :LspInfo
|
||||
|
||||
# Validate goto-definition for external libs
|
||||
# In external.php, cursor on Util::greetExternal, press gd
|
||||
```
|
||||
|
||||
### Validation Workspaces
|
||||
- `WORKSPACE_TEST/`: PHP project with `.nvim.lua` and `.git`
|
||||
- `EXTERNAL_TEST/`: External library referenced via includePaths
|
||||
- Test that `gd` resolves symbols in EXTERNAL_TEST from WORKSPACE_TEST
|
||||
|
||||
## Common Issues
|
||||
|
||||
### lua_ls Won't Start
|
||||
Mason-installed lua_ls may fail with missing `libbfd-2.38-system.so`. Install via system package manager instead.
|
||||
|
||||
### LSP Root Detection
|
||||
If parent repo picked as root, create empty `.git` or `.nvimroot` marker in intended workspace root.
|
||||
|
||||
### Duplicate gd Results (Fixed)
|
||||
Was caused by settings loading at wrong time; fixed by using `LspAttach` autocmd with actual `root_dir`.
|
||||
|
||||
## Process
|
||||
- Before large changes, update the task plan via the CLI `update_plan` tool.
|
||||
- Keep the live checklist in `MIGRATION_PLAN.md:1` up to date and in sync with changes.
|
||||
- After any config or plugin change, immediately update `MIGRATION_PLAN.md` (check off items, add notes, or adjust next steps).
|
||||
- After any change or decision, also update `LOG.md:1` (decisions log and design docs).
|
||||
- **After adding/removing/editing any keymaps**, immediately update `README.md` with the change (add new entries, remove deleted mappings, or update descriptions).
|
||||
- At the start of each phase, confirm scope and priorities for that phase.
|
||||
- Execute phases via subphases (`N.x`), where each bullet under a phase is its own implement-and-test step (e.g., Phase 3.1, 3.2, 3.3, 3.4).
|
||||
- Record decisions and rationale in `LOG.md:1` as they're made.
|
||||
- Keep PR-sized patches; avoid broad unrelated edits.
|
||||
- Document non-obvious choices in commit messages or short comments near the code that needs it.
|
||||
|
|
|
|||
175
LOG.md
175
LOG.md
|
|
@ -1,17 +1,14 @@
|
|||
# Neovim Rebuild — Decisions & Reference
|
||||
|
||||
Historical migration record and ongoing architectural decision log.
|
||||
Authoritative notes for the Neovim migration. Use this alongside `MIGRATION_PLAN.md` and `neovim-migration-guide.md`.
|
||||
|
||||
- Maintenance instructions: `AGENTS.md`
|
||||
- Active workflows and keymap reference: `README.md` and `:KeymapsGuide`
|
||||
- Migration plan: MIGRATION_PLAN.md
|
||||
- Guide and requirements: neovim-migration-guide.md
|
||||
|
||||
## Decisions Log
|
||||
|
||||
Record every decision here with a short rationale. Append new entries; do not rewrite history.
|
||||
|
||||
- 2025-01-13: **Popup borders for visibility**: Added rounded borders to all floating windows to prevent them from blending into the background. Changed `NormalFloat` and `FloatBorder` backgrounds from transparent (`c.NONE`) to `c.bg_ui` (slightly off-white) in colorscheme. Configured LSP handlers for hover and signature help to use `border = "rounded"`. Diagnostics already had borders configured. This provides clear visual separation between popups and main editor content.
|
||||
- 2025-01-13: **Git files to quickfix**: Added `<leader>gg` keymap to send all modified, deleted, and untracked Git files to quickfix list with status indicators. Uses `git status --porcelain` to parse file status (Modified, Deleted, Added, Untracked, etc.) and displays it in the quickfix text column. Implementation in `utils.git_changed_files()`. Complements existing `<leader>hq` (Gitsigns hunks to quickfix) with file-level Git status workflow.
|
||||
- 2025-01-12: **Custom Tabline Function**: Implemented configurable custom tabline to replace Neovim's hardcoded path shortening (e.g., `a/p/file.txt`). Function in `lua/utils.lua` allows controlling: (1) number of full parent directories via `utils.tabline_full_parents` (default: 1), and (2) shortening length via `utils.tabline_shorten_length` (default: 3 characters). Example: with defaults, `/path/to/my/project/src/file.txt` becomes `pat/to/my/project/src/file.txt`. User preference for seeing enough context in shortened paths while keeping tab width manageable.
|
||||
- 2025-12-06: PHP LSP = `intelephense` (good PHP ecosystem support; integrates includePaths).
|
||||
- 2025-12-06: Enable Markdown LSP = `marksman` (lightweight, good MD features).
|
||||
- 2025-12-06: Use legacy `listchars` and `showbreak` values (preserve muscle memory).
|
||||
|
|
@ -29,9 +26,6 @@ Record every decision here with a short rationale. Append new entries; do not re
|
|||
- Add Oil.nvim for file manipulation (rename/move/delete with buffer sync)
|
||||
- netrw for tree view and preview splits; Oil for operations that would break buffer names
|
||||
- PHP `gf` enhancement via `includeexpr` for WordPress/PHP path resolution
|
||||
- **Working directory locked to project root**: Disabled `autochdir`, set `netrw_keepdir = 1`, captured initial cwd in `vim.g.project_root`, configured Telescope to always search from project root regardless of current buffer
|
||||
- 2026-07-06: **Alternate-buffer netrw skip**: Added a lightweight real-file buffer tracker and mapped `<C-6>`/`<C-^>` so alternate-buffer jumps skip netrw explorer buffers when `#` points at netrw. Netrw buffers are also marked unlisted on FileType to reduce their impact on buffer navigation while preserving netrw browsing behavior. Fallback uses explicit `:buffer #` instead of `:normal! <C-^>` so regular alternate-file switching still works from the Lua mapping.
|
||||
- 2026-07-07: **Netrw alternate detection fix**: Real netrw alternate buffers can lose `filetype=netrw` and remain as an unlisted `NetrwTreeListing` buffer. The alternate-buffer skip now detects that buffer name as netrw so `<C-6>` returns to the previous real file instead of reopening an empty explorer buffer.
|
||||
- 2025-12-07: Treesitter Phase 5 decisions:
|
||||
- Focus on core languages: PHP, HTML, JavaScript, TypeScript, CSS, Markdown, Lua, Bash, JSON
|
||||
- Enable syntax highlighting with performance safeguard (disable for files >100KB)
|
||||
|
|
@ -75,8 +69,8 @@ Record every decision here with a short rationale. Append new entries; do not re
|
|||
- **WordPress**: phpcs/phpcbf already installed globally; use phpcs.xml or --standard=WordPress
|
||||
- **Format-on-save**: Enabled by default, toggle with `<leader>lt`
|
||||
- **Manual format**: `<leader>lf` (buffer), `<leader>lf` (visual range)
|
||||
- **Linting split**: conform.nvim for formatting, nvim-lint for diagnostics (replaced none-ls after discovering phpcbf preprocessing bug)
|
||||
- **Python support**: pyright LSP, ruff formatter/linter, treesitter parser (the original black plan was superseded)
|
||||
- **Linting split**: none-ls for formatting only, nvim-lint for diagnostics (none-ls removed linters)
|
||||
- **Python support**: pyright LSP, black formatter, ruff linter, treesitter parser
|
||||
- **Per-filetype indentation**: Explicit settings per filetype to match formatters
|
||||
- PHP: tabs, 2-space display (WordPress standards)
|
||||
- JS/TS/CSS/JSON/HTML: 2 spaces (Prettier)
|
||||
|
|
@ -84,20 +78,11 @@ Record every decision here with a short rationale. Append new entries; do not re
|
|||
- Markdown: 2 spaces (Prettier)
|
||||
- Python: 4 spaces (Black/PEP 8)
|
||||
- **Global defaults**: 4 spaces (reasonable baseline for other filetypes)
|
||||
- 2026-01-12: **conform.nvim migration**:
|
||||
- **Trigger**: none-ls phpcbf builtin had preprocessing bug that added blank lines before formatting
|
||||
- **Root cause**: none-ls uses LSP protocol for formatters, adds preprocessing step that corrupted input
|
||||
- **Investigation**: Created debug wrappers, confirmed phpcbf CLI works correctly, traced issue to none-ls preprocessing
|
||||
- **Solution**: Migrated to conform.nvim (modern, actively maintained, no LSP overhead)
|
||||
- **Configuration**: Simplified config using conform's built-in formatters, only customized phpcbf for WordPress standard
|
||||
- **Benefits**: Simpler code, no custom executable resolution needed, proper stdin/tmpfile handling per formatter
|
||||
- **Removed**: none-ls.lua deleted (was renamed to .disabled during migration)
|
||||
- 2025-12-07: Kept Behaviors Phase 10:
|
||||
- **Abbreviations**: Common typo corrections (`adn→and`, `waht→what`, `tehn→then`, `functin→function`, `positin→position`) in dedicated `lua/abbreviations.lua` file for modularity
|
||||
- **Templates**: Shell script template (template.sh) auto-loaded via BufNewFile autocmd for `*.sh` files
|
||||
- **Whitespace highlighting**: Already handled via `listchars` in Phase 3.2 (settings.lua)
|
||||
- **Persistent folds**: Not needed; UFO handles folding without explicit persistence mechanism
|
||||
- **Persistent undo**: Re-enabled 2025-01-06 via `undofile=true` and `undodir` in settings.lua (preserves undo history across sessions)
|
||||
- 2025-12-11: Colorscheme Phase 11.2:
|
||||
- **Color palette extraction**: Extracted all 45 color definitions from original Paper Tonic colorscheme
|
||||
- **Structure**: Created `lua/paper-tonic-modern/colors.lua` with comprehensive documentation
|
||||
|
|
@ -178,83 +163,85 @@ Record every decision here with a short rationale. Append new entries; do not re
|
|||
- **No overrides needed**: Modern implementation doesn't require separate override file
|
||||
- 2025-12-12: Added keymap reference documentation (now `README.md`) + `:KeymapsGuide` floating viewer to document every configured keymap (global + plugin-specific) grouped by source file.
|
||||
- 2025-12-12: nvim-cmp updated to disable auto-selection; confirm requires explicit item selection.
|
||||
- 2026-10-27: Phase 12 cleanup retired 607 tracked `.vimtmp` backup artifacts and a broken legacy Paper Tonic symlink while preserving the meaningful Vimscript archive. Added an ignore rule for the retired backup directory and corrected the legacy archive index.
|
||||
- 2026-10-27: Project `.nvim.lua` settings are now read with `vim.secure.read()` before evaluation. This closes the trust bypass caused by manually calling `dofile()` from the LSP attachment callback.
|
||||
- 2026-10-27: Validation confirmed a clean Neovim 0.11.5 headless launch in approximately 45 ms with 29 configured plugins. Formatter and language-server executables managed by Mason are present in Mason's bin directory; PHP tools and `lua-language-server` are available system-wide.
|
||||
- 2026-10-27: Repaired `test-diagnostics.lua` so its intentional unreachable-code example remains valid Lua and can be parsed by `lua_ls`.
|
||||
- 2026-10-27: Live validation confirmed Intelephense attaches in `WORKSPACE_TEST` and receives the trusted external `includePaths`. Conform reports prettier, phpcbf, and stylua available; nvim-lint resolves eslint_d, phpcs, and markdownlint.
|
||||
- 2026-10-27: Updated `AGENTS.md` status and LSP architecture notes to reflect completed colorscheme work and the current Phase 12 implementation.
|
||||
- 2026-10-27: Added Conform's built-in `ruff_format` for Python. Ruff was already Mason-managed for diagnostics; this closes a gap where documentation claimed Python formatting but format-on-save had no Python formatter and disabled LSP fallback.
|
||||
- 2026-10-27: Fixed `<C-6>` in netrw when no previous real-file buffer has been recorded. Buffer classification now rejects `nil`, non-numeric, and non-positive buffer identifiers before calling Neovim's buffer API, allowing the mapping to fall back safely.
|
||||
- 2026-10-27: Removed Oil.nvim after workflow evaluation. Netrw is now the sole tree browser and file explorer, preserving the same navigation model on remote systems; Telescope remains dedicated to fuzzy finding. Removed Oil's plugin spec, lockfile entry, keymaps, colorscheme groups, and active documentation.
|
||||
- 2026-10-27: Planned the next work in two ordered phases. Phase 13 upgrades the standalone Neovim installation from 0.11.5 to stable 0.12.6 using versioned installations, isolated plugin testing, an unchanged initial lockfile, and an immediate rollback path; plugin updates follow only after core compatibility, and Mason tools remain a later step. Phase 14 then adds netrw-only live previews and read-only directory summaries against the validated 0.12 runtime.
|
||||
- 2026-10-27: Recorded the pre-upgrade rollback baseline: Neovim 0.11.5, 28 active lazy.nvim plugin specs after Oil removal, 32 compiled Treesitter parser binaries, clean headless startup, all active Lua files parsing, and `git diff --check` passing. The standalone 0.11.5 installation remains untouched under `/opt/neovim/nvim-linux-x86_64`.
|
||||
- 2026-10-28: Installed the verified official Neovim 0.12.6 archive alongside the untouched 0.11.5 installation at `/opt/neovim/nvim-0.12.6`. Initial interactive startup with the existing configuration succeeded. Removed redundant `vim.lsp.with()` wrappers for hover and signature-help borders after 0.12 reported their deprecation; the shared `vim.lsp.util.open_floating_preview` override already applies the same border on both 0.11 and 0.12. Clean headless startup then passed with the existing locked plugins under both binaries.
|
||||
- 2026-10-28: The 0.12 health review exposed overlapping LSP activation: mason-lspconfig v2 automatically enabled every installed server while `lsp.lua` explicitly configured and enabled the selected set. Disabled mason-lspconfig automatic activation, removed its obsolete `automatic_installation` option, and aligned it with nvim-lspconfig's buffer events. This prevents unintended activation of installed tools such as StyLua's LSP mode and leaves `lsp.lua` as the single activation authority.
|
||||
- 2026-10-28: Live Intelephense attachment passed under both Neovim 0.11.5 and 0.12.6 after the LSP activation cleanup. The test also exposed the deprecated function-style `client.notify(...)` call in the project-settings callback; changed it to `client:notify(...)`, which works on both supported versions.
|
||||
- 2026-10-28: Replaced the remaining `vim.loop.fs_stat` calls with `vim.uv.fs_stat` and migrated `[d`/`]d` from deprecated diagnostic navigation functions to `vim.diagnostic.jump({ count = -1/1 })`. Both APIs remain compatible with the rollback runtime, Neovim 0.11.5.
|
||||
- 2026-10-28: Validated Neovim 0.12 project configuration using a disposable nested workspace and isolated trust database. With `exrc` and `secure` enabled through a normal XDG config, a trusted parent `.nvim.lua` executed exactly once and `vim.secure.read()` returned its contents. The live Intelephense test separately confirmed that the repository's project-local settings loader still receives trusted settings from the client's root.
|
||||
- 2026-10-28: Validated the netrw workflow on Neovim 0.12.6. The default runtime wrapper automatically loads bundled netrw v184 from its optional package, so adding a configuration-level `packadd netrw` would be redundant and would complicate 0.11 rollback compatibility. `:Explore` opened the configured tree view, `p` created a real preview window, and `<C-6>` returned from the explorer to the source file.
|
||||
- 2026-10-28: Kept `mbbill/undotree` after checking Neovim 0.12's built-in alternative. The native `nvim.undotree` package is optional and remains unloaded; it exposes `:Undotree`, whereas the configured plugin's `:UndotreeToggle` command, focused panel, and diff layout still open successfully under 0.12.6. There is no active command or runtime conflict.
|
||||
- 2026-10-28: Completed the configuration-level Neovim 0.12 breaking-change audit. Diagnostic jump behavior passed under both 0.11.5 and 0.12.6, and a loaded-plugin `vim.deprecated` scan now reports only `copilot-cmp`'s upstream `client.is_stopped` call. That plugin warning is safe on 0.12 but remains a tracked compatibility concern before Neovim 0.13.
|
||||
- 2026-10-28: Final Phase 13.3 smoke tests passed: both 0.11.5 and 0.12.6 start with the updated configuration, 0.12 attaches Intelephense with project settings, `git diff --check` is clean, and the measured 0.12 headless startup reached `NVIM STARTED` in approximately 43 ms with the existing locked plugins.
|
||||
- 2026-10-28: Updated plugins in an isolated Neovim 0.12 worktree and XDG environment. The candidate passed automated loading checks for LSP, completion, Telescope/fzf, Mason integration, formatting, linting, Gitsigns, indent guides, autopairs, surround, UFO, Undotree, and PHP/HTML/CSS/JavaScript Tree-sitter parsers and custom queries. Copilot's new native language-server download completed in isolation and the client authenticated successfully. Mason-managed tools were not updated.
|
||||
- 2026-10-28: Kept `nvim-treesitter` and `nvim-treesitter-textobjects` on their frozen `master` branches. Their rewritten `main` branches remove the `nvim-treesitter.configs` API used by this configuration and therefore require a separate migration; explicit branch pins prevent an ordinary plugin sync from crossing that boundary. Migrated the updated nvim-surround v4 configuration to its unchanged default mappings by removing the retired `opts.keymaps` field.
|
||||
- 2026-10-28: Disabled lazy.nvim's LuaRocks integration because no configured plugin requires LuaRocks. This removes the irrelevant missing-hererocks health error without adding a system dependency. Candidate health otherwise reports only optional missing language runtimes, the pending inline-Copilot migration, and the `copilot-cmp` deprecation that will disappear with that migration.
|
||||
- 2026-10-28: Adopted the isolated candidate's reviewed plugin lockfile and compatibility adjustments into the main worktree. Production plugin directories remain unchanged until the 0.12 activation step, preserving the working 0.11 rollback environment.
|
||||
- 2026-10-28: Chose the post-activation native-feature direction for 0.12. Keep lazy.nvim because the configuration still benefits from its event/command loading, dependency ordering, and build hooks; do not mix the runtime upgrade with an experimental `vim.pack` migration. After activating 0.12, replace `mbbill/undotree` with the native optional package and trial native insert-mode/LSP completion plus built-in snippets. Copilot will use inline suggestions with a separate accept key rather than appearing in the completion popup; remove the cmp stack only after interactive language and editing validation.
|
||||
- 2026-10-28: Activated Neovim 0.12.6 with the user-level selector `~/.local/bin/nvim`, which precedes the older `/opt` PATH entry. The root-owned `/opt/neovim` directory could not be reorganized without an interactive sudo password, so 0.11.5 remains intact at `/opt/neovim/nvim-linux-x86_64/bin/nvim`; rollback is `ln -sfn /opt/neovim/nvim-linux-x86_64/bin/nvim ~/.local/bin/nvim`.
|
||||
- 2026-10-28: Implemented the 0.12 native editing trial. Native `nvim.undotree` now owns `<leader>u`; native autocomplete combines LSP omnifunc results and bounded buffer sources after a 150 ms delay, requires explicit selection, accepts with `<C-y>`, and uses built-in snippet tabstops. Copilot now supplies separate inline ghost text accepted with `<M-l>` and hides while the completion popup is visible. Removed the nvim-cmp, cmp source, LuaSnip, copilot-cmp, and external Undotree specs, integrations, lock entries, and highlight groups.
|
||||
- 2026-10-28: Refined native completion after the PTY smoke test showed buffer words sorting ahead of a valid PHP method. LSP-attached buffers now autocomplete exclusively from the LSP omnifunc; `<C-x><C-n>` remains the explicit current-buffer word workflow, and non-LSP buffers retain bounded automatic word completion. This makes the first selectable language result predictable without losing native fallback completion.
|
||||
- 2026-10-28: Added narrow 0.12 guards around the new `autocomplete` option, source match limits, and optional native Undotree package. The retained 0.11.5 binary can therefore still start the configuration for emergency rollback, although native autocomplete and Undotree are intentionally unavailable until the selector is returned to 0.12.6.
|
||||
- 2026-10-28: Final smoke testing found that loading `nvim.undotree` before lazy.nvim setup left its command registered but removed its Lua module path. Moved `packadd nvim.undotree` after lazy.nvim finalizes `runtimepath`. The same test showed nvim-ts-autotag attaching to Markdown despite the intended filetype restriction; global autotag actions are now disabled and explicitly enabled only for HTML/PHP/JS/TS/Vue tag-bearing filetypes.
|
||||
- 2026-10-28: Active-runtime validation passed through the normal `nvim` selector: native Undotree opens, netrw and Telescope load, PHP native completion offers and accepts `greetExternal()` with snippet syntax, Copilot's inline client is authenticated, Markdown no longer runs autotag, and HTML autotag exits Insert mode without errors. `vim.deprecated` is clean. Remaining health warnings are optional missing language runtimes and the harmless unknown `markdown.mdx` filetype hint.
|
||||
- 2026-10-28: Marked `neovim-migration-guide.md` as historical planning input. Its original Neo-tree, cmp, and plugin assumptions are retained for provenance but no longer compete with the active architecture documents.
|
||||
- 2026-10-28: User normal-use checks passed for the 0.12 native completion, snippet, autopairs, and inline Copilot workflow, closing the Phase 13.9 settling gate. Began Phase 14 with the confirmed netrw-only model: `p` starts previewing, cursor movement updates an existing preview, directories show read-only immediate-child summaries, and leaving netrw closes the preview.
|
||||
- 2026-10-28: Revalidated bundled netrw v184. Its documented `netrw#Call()` bridge exposes `NetrwGetWord`, `NetrwTreePath`, `NetrwBrowseChgDir`, and `NetrwPreview`. In tree view, `NetrwTreePath` returns the selected directory path or the selected file's parent, allowing local paths to be resolved without parsing indentation or mutating netrw's expand/collapse state. Remote URI targets will retain native fallback behavior.
|
||||
- 2026-10-28: Implemented Phase 14's plugin-free netrw preview extension in `lua/netrw-preview.lua`. Pressing `p` previews files through netrw's native machinery or shows a read-only immediate-child directory summary; while that preview window exists, a 90 ms buffer-local cursor debounce replaces it with the current selection. Manual `:pclose` stops updates, and leaving or wiping the explorer releases its preview and timer. Directory summaries are local-filesystem only, mirror netrw's active hide pattern, cap output at 200 entries, and never traverse symbolic links; remote URI schemes fall back to netrw's native preview path.
|
||||
- 2026-10-28: Automated Phase 14 checks passed for file/directory transitions, manual close and reopen, all four file-open actions, tree expansion and collapse, rapid cursor movement, spaces, Unicode, symlinks, empty and unreadable directories, and the 200-entry cap. A PTY-backed launch on a directory confirmed Neovim 0.12 enters the configured netrw tree, so no special `filetype=directory` handling is required. Separate-tab, deleted-entry, and real SSH checks remain as interactive validation.
|
||||
- 2026-10-28: An isolated lifecycle rerun exposed netrw's focus hop into an existing preview window while replacing a directory summary through its native preview function. The extension now explicitly restores the netrw window after that call, preserving tree-focused `j`/`k` navigation. Leave cleanup waits 20 ms before checking the settled current window and ignores callbacks raised while the native preview call is active, then closes only after a real explorer exit. The transient re-entrancy guard is not preview-mode state, and the cleanup timer is released when the netrw buffer is wiped.
|
||||
- 2026-10-28: Fixed a reproducible Neovim 0.12 Tree-sitter race during rapid cross-language netrw previews. Native `:pedit` unloads the previous preview buffer while its asynchronous parser may still be running, producing `TSNode:range()` errors. Preview-only file buffers are now kept loaded but unlisted for the rest of the Neovim session, with Tree-sitter highlighting suspended in favor of Vim syntax; avoiding parser detachment is necessary because delayed unloading reproduces the same race. Pre-existing buffer state is preserved, while entering a previewed file for real editing restores listed-buffer behavior and Tree-sitter immediately. An 80-step Markdown/Lua/JSON preview stress test, edit restoration check, retained-buffer check, and pre-existing-buffer check all pass.
|
||||
- 2026-10-28: Disabled diagnostic rendering in netrw file preview buffers. The preview metadata records each buffer's prior diagnostic state and restores it when the file is opened for editing, keeping ephemeral previews quiet without overriding buffers where diagnostics were already disabled.
|
||||
- 2026-10-28: Made netrw file previews intentionally plain after CSS and HTML exposed residual colour. The remaining decoration was Vim regex syntax plus indent-blankline extmarks, not diagnostics or Tree-sitter. Preview buffers now clear `syntax` and disable their buffer-local indent guides, then restore both recorded states on real edit.
|
||||
- 2026-10-28: Added buffer-local netrw `<M-j>` / `<M-k>` mappings to scroll the current preview with native `<C-e>` / `<C-y>` behavior while focus remains in the tree. The mappings accept Vim counts and quietly do nothing when no preview exists.
|
||||
- 2026-10-28: Hardened preview scrolling after an interactive over-scroll surfaced a window-local error that did not reproduce headlessly. The temporary preview-window call is now protected, so stale-window and boundary failures are treated like native top/bottom clamping instead of reaching the command line.
|
||||
- 2026-10-28: Excluded netrw from automatic session persistence after `:mksession` serialized its generated `NetrwTreeListing` name and restored an empty explorer buffer. Before the existing exit-time save, preview windows and netrw windows are removed; a netrw-only tab is dropped, while the sole remaining netrw window is replaced with an ordinary file buffer or a blank fallback. Netrw is intentionally not rebuilt on load.
|
||||
- 2026-10-28: Changed the enhanced netrw `p` mapping into a true toggle. With no preview it opens the selected file or directory and begins live cursor updates; with an existing preview it closes that window and stops updates, matching manual `:pclose` behavior.
|
||||
- 2026-10-28: Declared the migration complete after sustained daily use of the modern Lua configuration. Interactive navigation, language tooling, native completion, Copilot, formatting, linting, and the enhanced netrw workflow are considered validated. Real SSH URI previews and use of stock netrw without this configuration remain optional portability checks, not release gates. This decision also ends the requirement to retain migration-only archives and fixtures in the live repository; their removal will be handled as a separate, explicit cleanup.
|
||||
- 2026-10-28: Replaced the migration-era `AGENTS.md` with a concise maintenance guide for the established configuration. Removed completed phase tracking, obsolete validation-workspace instructions, resolved issue notes, and the target-tree description; retained current architectural guardrails, documentation expectations, a smoke-test command, and a short history note.
|
||||
- 2026-10-28: Retired the completed migration's legacy configuration, vendored plugin archive, UltiSnips collection, validation workspaces, root test assets, superseded planning documents, and phase labels in active Lua comments. Git history now provides the historical archive. Persistent undo storage moved from the configuration repository to `stdpath('state')/undo`; the active README, architectural log, lockfile, colorscheme, spell data, and templates remain.
|
||||
- 2026-10-28: Diagnosed the Tree-sitter `TSNode:range()` failure as the known incompatibility between Neovim 0.12 and nvim-treesitter's locked legacy `master` branch. Migrated nvim-treesitter and nvim-treesitter-textobjects to their rewritten `main` branches: native Neovim highlighting and incremental selection replace the old modules, textobjects use explicit mappings, indentation uses the new plugin expression when a query exists, and autotag retains its direct supported setup. Installed the verified official Tree-sitter CLI 0.26.9 binary in `~/.local/bin` after the system package required interactive sudo and Cargo compilation required unavailable libclang. Reinstalled all configured parsers in the new site directory and removed obsolete generated parser copies from the plugin checkout. The plugin audit confirmed every plugin is current for its configured branch or release constraint; nvim-surround remains on the latest release rather than its newer unreleased `main` commit.
|
||||
- 2026-10-28: Fixed stale deleted files persisting across session recreation. Deleting `Session.vim` did not clear the in-memory argument list or listed buffers, so `:mksession` serialized the removed diagnostics fixture again. Session load and exit-time save now discard unmodified nonexistent local-file buffers and missing argument-list entries before restoring or writing the session; real files, URI buffers, unnamed buffers, and modified buffers remain protected.
|
||||
- 2026-10-28: Re-enabled highlighted netrw file previews after migrating to the Neovim 0.12-compatible nvim-treesitter `main` branch. Preview buffers retain native Tree-sitter or Vim syntax highlighting, while diagnostics and indent guides remain suppressed. The existing loaded-but-unlisted buffer lifecycle protection remains in place so the original unload behavior is not restored. An automated 80-transition Markdown/Lua/JSON/CSS/HTML stress test and subsequent normal use passed without `TSNode:range()` errors, so the trial was adopted as the permanent behavior.
|
||||
|
||||
## Project-Local Configuration
|
||||
## Project-Local Configuration (design)
|
||||
|
||||
The final implementation uses Neovim's native `exrc` support with `secure` enabled. A project's trusted `.nvim.lua` returns an `lsp` table keyed by server name. An `LspAttach` callback securely reads settings from the client's actual root directory and sends them with `workspace/didChangeConfiguration`, so settings do not depend on Neovim's current working directory.
|
||||
Context: Projects can contain multiple git repositories (e.g., WordPress site with theme + multiple plugins). We need a way to set per-project `intelephense.includePaths` and similar without globalizing settings.
|
||||
|
||||
Example `.nvim.lua`:
|
||||
Options considered
|
||||
- Layered JSON files (recommended): `.nvim.json` (committed) + `.nvim.local.json` (gitignored)
|
||||
- Walk upward from current file; collect and merge configs until reaching a boundary marker or filesystem root.
|
||||
- Boundary marker: `.nvimroot` to define a workspace that can encompass multiple repos.
|
||||
- Merge order: top → bottom; nearest wins on conflicts; arrays replace by default unless we later add a merge strategy.
|
||||
- Pros: safe (data-only), portable, reviewable in PRs.
|
||||
- Cons: less dynamic than Lua.
|
||||
- Layered Lua files: `.nvim.lua` + `.nvim.local.lua`
|
||||
- Pros: maximum flexibility (computed paths).
|
||||
- Cons: executes code from the repo; security gates required.
|
||||
- Env/direnv: rejected (decision 2025-12-06).
|
||||
- Central registry file in `~/.config/nvim/`: possible later for private overrides, but not primary.
|
||||
|
||||
```lua
|
||||
return {
|
||||
lsp = {
|
||||
intelephense = {
|
||||
settings = {
|
||||
intelephense = {
|
||||
environment = {
|
||||
includePaths = {
|
||||
Chosen approach (confirmed)
|
||||
- Use `folke/neoconf.nvim` with `.neoconf.json` at the workspace root (or project roots) to supply LSP/plugin settings. Multi-repo: keep a single `.neoconf.json` at the parent workspace folder and open Neovim from there (or use a rooter later if needed).
|
||||
|
||||
Example `.neoconf.json`
|
||||
```
|
||||
{
|
||||
"lspconfig": {
|
||||
"intelephense": {
|
||||
"settings": {
|
||||
"intelephense": {
|
||||
"environment": {
|
||||
"includePaths": [
|
||||
"wp-content/themes/my-theme",
|
||||
"wp-content/plugins/custom-plugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"wp-content/plugins/custom-plugin"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
- Files recognized per directory level:
|
||||
- `.nvim.json`: checked into VCS; shared per-project defaults.
|
||||
- `.nvim.local.json`: gitignored; machine-specific overrides.
|
||||
- Loader behavior:
|
||||
1. Start at the buffer’s directory; ascend toward root.
|
||||
2. Stop at directory containing `.nvimroot` (if found) or at filesystem root.
|
||||
3. At each level, if `.nvim.json` or `.nvim.local.json` exists, parse and stage for merge.
|
||||
4. Merge staged configs in ascending order; nearest directory applies last.
|
||||
- Path resolution:
|
||||
- Relative paths resolve against the topmost boundary (i.e., `.nvimroot` directory if present; otherwise the highest directory in which a config was found). This allows referencing sibling repos (e.g., theme and plugins) from a single top-level site folder.
|
||||
|
||||
Example `.nvim.json`
|
||||
```
|
||||
{
|
||||
"lsp": {
|
||||
"php": {
|
||||
"intelephense": {
|
||||
"includePaths": [
|
||||
"wp-content/themes/my-theme",
|
||||
"wp-content/plugins/custom-plugin",
|
||||
"vendor/some-package/src"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Neoconf and the earlier layered JSON proposal were rejected. They remain in the chronological decision entries above only as superseded history.
|
||||
Intended integration
|
||||
- A helper module `lua/local_config.lua` will expose:
|
||||
- `load(start_dir) -> table` collecting and merging configs
|
||||
- `get(path, default)` for reads, e.g., `get({"lsp","php","intelephense","includePaths"}, {})`
|
||||
- LSP wiring (in Phase 3.5):
|
||||
- Read includePaths via the helper and pass to `settings.intelephense.environment.includePaths` in `lspconfig.intelephense.setup{}`.
|
||||
|
||||
Open items to confirm
|
||||
- Confirm JSON as the format (vs Lua) for project-local config.
|
||||
- Confirm `.nvimroot` as the workspace boundary marker name.
|
||||
- Confirm array merge behavior (replace vs concatenate). Initial proposal: replace.
|
||||
|
||||
## LSP Scope (initial)
|
||||
|
||||
|
|
@ -267,11 +254,9 @@ Neoconf and the earlier layered JSON proposal were rejected. They remain in the
|
|||
|
||||
- `spelllang = en_gb`
|
||||
- `listchars` and `showbreak` will reuse legacy values.
|
||||
- `autocomplete` with `completeopt = menu,menuone,noselect,popup,fuzzy` for Neovim 0.12 native completion.
|
||||
- `completeopt = menu,menuone,noselect` for `nvim-cmp`.
|
||||
|
||||
## Maintenance Reminders
|
||||
## Process Reminders
|
||||
|
||||
- Follow `AGENTS.md` for current maintenance rules.
|
||||
- Update `README.md` when user-facing behavior changes.
|
||||
- Record significant architectural decisions in this log.
|
||||
- Keep changes focused and verify affected workflows.
|
||||
- After any change or decision, update this README and MIGRATION_PLAN.md.
|
||||
- Keep subphases small and verify each step in isolation.
|
||||
|
|
|
|||
506
MIGRATION_PLAN.md
Normal file
506
MIGRATION_PLAN.md
Normal file
|
|
@ -0,0 +1,506 @@
|
|||
# Neovim Migration Checklist
|
||||
|
||||
Source of truth for the step-by-step rebuild. Keep this concise and up to date. See details in `neovim-migration-guide.md`.
|
||||
|
||||
## Phase 0 — Ground Rules
|
||||
- [x] Create AGENTS.md with rules
|
||||
|
||||
## Phase 1 — Clean & Archive Legacy Config
|
||||
|
||||
## Phase 1.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
|
||||
## Phase 1.2 — Inventory legacy files
|
||||
- [x] Inventory existing Vimscript, plugin files, and directories
|
||||
|
||||
## Phase 1.3 — Create archive location
|
||||
- [x] Create `legacy/` archive folder within this config
|
||||
|
||||
## Phase 1.4 — Move legacy files into archive
|
||||
- [x] Move legacy init files and plugin directories into `legacy/` (do not delete)
|
||||
|
||||
## Phase 1.5 — Document archived contents
|
||||
- [x] Optionally add `legacy/README.md` noting what was archived
|
||||
|
||||
## Phase 1.6 — Preserve selected directories
|
||||
- [x] Keep `undodir`, `spell`, `view`, `UltiSnips`, `templates` as-is for now (review later)
|
||||
|
||||
## Phase 2 — Bootstrap
|
||||
|
||||
## Phase 2.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
|
||||
## Phase 2.2 — Scaffold Lua config skeleton
|
||||
- [x] Scaffold Lua config skeleton (`init.lua`, `lua/settings.lua`, `lua/keymaps.lua`, `lua/autocmds.lua`, `lua/utils.lua`, `lua/plugins/`)
|
||||
|
||||
## Phase 2.3 — Bootstrap lazy.nvim
|
||||
- [x] Bootstrap `lazy.nvim` plugin manager
|
||||
|
||||
## Phase 2.4 — Disable unused providers
|
||||
- [x] Disable unused providers (ruby, perl, node)
|
||||
|
||||
## Phase 2.5 — Ensure lazy boots without specs
|
||||
- [x] Ensure lazy boots without specs (add empty `lua/plugins/init.lua`)
|
||||
|
||||
## Phase 3 — Core Editing & LSP
|
||||
|
||||
## Phase 3.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: PHP LSP = `intelephense`
|
||||
- [x] Decision: Enable Markdown LSP = `marksman`
|
||||
- [x] Decision: Use legacy `listchars` and `showbreak` values
|
||||
- [x] Decision: Support per‑project config for `intelephense.includePaths`
|
||||
- [x] Decision: No direnv fallback for local config
|
||||
|
||||
## Phase 3.2 — Non-plugin settings to Lua
|
||||
- [x] Port non-plugin settings to Lua (options, listchars, showbreak, spelllang=en_gb)
|
||||
|
||||
## Phase 3.3 — Core completion stack
|
||||
- [x] Add core completion stack: `nvim-cmp`, `cmp-nvim-lsp`, `cmp-buffer`, `cmp-path`, `LuaSnip`
|
||||
- [x] Disable auto-selection in nvim-cmp (require explicit confirm)
|
||||
|
||||
## Phase 3.4 — Project‑local configuration (native exrc)
|
||||
- [x] Confirm scope and priorities for this subphase
|
||||
- [x] Decision: Use native `exrc` + `secure` instead of neoconf (neoconf incompatible with Neovim 0.11+ vim.lsp.config API)
|
||||
- [x] Enable `exrc` and `secure` in settings.lua
|
||||
- [x] Implement `.nvim.lua` loader in LSP config using `on_new_config` hook
|
||||
- [x] Wire `intelephense.environment.includePaths` via `.nvim.lua`
|
||||
- [x] Create validation workspaces: `WORKSPACE_TEST/` and `EXTERNAL_TEST/` with sample PHP files
|
||||
- [x] Migrate to `vim.lsp.config()` and `vim.lsp.enable()` (Neovim 0.11+ native API)
|
||||
- [x] Verify project settings load correctly from actual root_dir
|
||||
- [x] Clean up debug notifications and temporary code
|
||||
|
||||
## Phase 3.7 — Clean LSP config
|
||||
- [x] Remove debug/helper logic from LSP config
|
||||
- [x] Migrate from deprecated `require('lspconfig')[server].setup()` to `vim.lsp.config()` + `vim.lsp.enable()`
|
||||
- [x] Use `on_new_config` hook for project-local settings loading (loads from actual root_dir, not cwd)
|
||||
|
||||
## Phase 3.8 — Validate project-local LSP settings
|
||||
- [x] Create test workspaces with `.nvim.lua` files
|
||||
- [x] Validate settings load from actual root_dir via `on_new_config` hook
|
||||
- [x] Verify `gd` works for external library references via `intelephense.environment.includePaths`
|
||||
- [x] Clean up debug code and notifications
|
||||
|
||||
## Phase 3.9 — Native exrc + vim.lsp.config migration (RESOLVED)
|
||||
- [x] Discovered neoconf incompatible with Neovim 0.11+ (GitHub issue #116, unresolved since May 2024)
|
||||
- [x] Migrated to native `exrc` + `secure` approach (zero dependencies, aligned with minimal philosophy)
|
||||
- [x] Implemented `.nvim.lua` loader using `on_new_config` hook (loads from actual root_dir)
|
||||
- [x] Migrated from deprecated `require('lspconfig')` framework to `vim.lsp.config()` + `vim.lsp.enable()`
|
||||
- [x] Root detection handled by nvim-lspconfig's native configs (no custom root_dir needed)
|
||||
- [x] Validated `gd` works for external library symbols via `intelephense.environment.includePaths`
|
||||
- [x] Settings schema: `.nvim.lua` returns `{ lsp = { [server_name] = { settings = {...} } } }`
|
||||
- [x] Security: `secure` mode prompts user to trust `.nvim.lua` files before execution
|
||||
- [x] Kept `single_file_support = false` for `intelephense`
|
||||
- [x] Fixed duplicate `gd` results issue
|
||||
|
||||
## Phase 3.5 — LSP minimal defaults
|
||||
- [x] Add `nvim-lspconfig` with minimal defaults (no over-configuration)
|
||||
- [x] Add minimal LSP on-attach keymaps (gd, gr, K, gD, gI)
|
||||
- [x] Add global LSP keymaps with fallback in `lua/keymaps.lua`
|
||||
- [x] Intelephense: set `single_file_support=false`, root detection via nvim-lspconfig defaults
|
||||
- [x] Project settings loaded via `on_new_config` hook from `.nvim.lua` files
|
||||
|
||||
## Phase 3.6 — LSP server management (Mason)
|
||||
- [x] Confirm scope and priorities for this subphase
|
||||
- [x] Add `williamboman/mason.nvim` and `williamboman/mason-lspconfig.nvim`
|
||||
- [x] Ensure servers installed: `lua_ls`, `tsserver`, `html`, `cssls`, `jsonls`, `bashls`, `marksman`, `intelephense`
|
||||
- [x] Keep our custom per-server setup; use Mason only for installation
|
||||
|
||||
## Phase 4 — Navigation
|
||||
|
||||
## Phase 4.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Skip Neo-tree in favor of netrw for navigation/visual context
|
||||
- [x] Decision: Use netrw for project structure visualization and file preview
|
||||
- [x] Decision: Telescope as primary "find file" tool
|
||||
- [x] Decision: Add Oil.nvim for file manipulation (handles buffer sync on rename/move/delete)
|
||||
- [x] Note: Oil.nvim is for evaluation; alternative is mini.files if too heavy
|
||||
|
||||
## Phase 4.2 — Configure netrw
|
||||
- [x] Configure netrw with tree view, preview split, and basic settings (no banner, sensible defaults)
|
||||
- [x] Created `lua/netrw-config.lua` with settings: tree view, horizontal preview split below, 50/50 split, human-readable sizes
|
||||
- [x] Add netrw keymaps: `<leader>te` (new tab at current file's directory), `<leader>tE` (new tab at project root)
|
||||
- [x] Decision: No `<leader>e` or `<leader>v` keymaps - use `:Ex`, `:Vex` directly when needed
|
||||
- [x] Preview behavior: Enter opens file in netrw window, `p` opens 50/50 horizontal split below
|
||||
|
||||
## Phase 4.2.1 — PHP gf enhancement
|
||||
- [x] Add PHP `includeexpr` for intelligent `gf` behavior (handles `__DIR__`, `__FILE__`, `dirname(__FILE__)` patterns)
|
||||
- [x] Created `after/ftplugin/php.lua` with path resolution for WordPress/PHP patterns
|
||||
- [x] Tested and validated with test-gf.php
|
||||
|
||||
## Phase 4.3 — Telescope setup
|
||||
- [x] Add `telescope.nvim` + `telescope-fzf-native.nvim` for fuzzy finding
|
||||
- [x] Configure basic pickers: `find_files`, `live_grep`, `buffers`, `help_tags`, `oldfiles`, `current_buffer_fuzzy_find`
|
||||
- [x] Add LSP pickers: `lsp_document_symbols`, `lsp_workspace_symbols`
|
||||
- [x] Keymaps configured:
|
||||
- `<leader>ff` - Find files
|
||||
- `<leader>fg` - Live grep (search text)
|
||||
- `<leader>fb` - Find buffers (with `<C-d>` to delete)
|
||||
- `<leader>fh` - Find help
|
||||
- `<leader>fr` - Recent files
|
||||
- `<leader>/` - Search current buffer
|
||||
- `<leader>fs` - Document symbols (LSP)
|
||||
- `<leader>fS` - Workspace symbols (LSP)
|
||||
- [x] Minimal UI: dropdown theme for files/buffers, no previewer for quick selection
|
||||
|
||||
## Phase 4.4 — Oil.nvim for file manipulation
|
||||
- [x] Add `stevearc/oil.nvim` for filesystem operations (rename, create, delete, copy, move)
|
||||
- [x] Configure to handle buffer name sync on file operations
|
||||
- [x] Keep minimal - use only when shell operations would cause buffer issues
|
||||
- [x] Keymaps configured:
|
||||
- `<leader>fo` - Open Oil file browser (regular buffer)
|
||||
- `<leader>fO` - Open Oil in floating window (with floating previews)
|
||||
- `<C-p>` in Oil - Preview files (vertical split to right for regular, floating window for float mode)
|
||||
- [x] Preview splits open to the right via `vertical = true` and `split = 'belowright'`
|
||||
- [x] Floating window preview direction: `preview_split = "right"`
|
||||
- [x] Note: Evaluate practicality; can switch to `mini.files` if preferred
|
||||
|
||||
## Phase 5 — Treesitter
|
||||
|
||||
## Phase 5.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Focus on languages: PHP, HTML, JavaScript, TypeScript, CSS, Markdown, Lua, Bash, JSON
|
||||
- [x] Decision: Enable syntax highlighting and incremental selection (CR to expand, BS to shrink)
|
||||
- [x] Decision: Enable textobjects for functions, classes, parameters, conditionals, loops
|
||||
- [x] Decision: Enable autotag for HTML/PHP/JS/React files
|
||||
- [x] Decision: Disable indent (experimental) to start; can enable per-filetype if stable
|
||||
|
||||
## Phase 5.2 — Base Treesitter
|
||||
- [x] Add `nvim-treesitter` with incremental selection, highlighting
|
||||
- [x] Configure parsers: lua, vim, vimdoc, php, html, javascript, typescript, tsx, css, scss, json, markdown, markdown_inline, bash, regex
|
||||
- [x] Enable auto-install for missing parsers
|
||||
- [x] Incremental selection keymaps: CR (init/expand), S-CR (scope expand), BS (shrink)
|
||||
- [x] Disable for large files (>100KB) to maintain performance
|
||||
|
||||
## Phase 5.3 — Treesitter textobjects
|
||||
- [x] Add `nvim-treesitter-textobjects`
|
||||
- [x] Select keymaps: `af`/`if` (function), `ac`/`ic` (class), `aa`/`ia` (parameter), `ai`/`ii` (conditional), `al`/`il` (loop), `a/` (comment)
|
||||
- [x] Move keymaps: `]f`/`[f` (next/prev function start), `]F`/`[F` (function end), similar for classes and parameters
|
||||
- [x] Swap keymaps: `<leader>a`/`<leader>A` (swap parameter with next/prev)
|
||||
|
||||
## Phase 5.4 — Treesitter autotag
|
||||
- [x] Add `nvim-ts-autotag`
|
||||
- [x] Enable auto-close, auto-rename, and close-on-slash for HTML/PHP/JS/React/TS/Vue files
|
||||
|
||||
## Phase 6 — UX / Editing
|
||||
|
||||
## Phase 6.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: No cursorcolumn (as per AGENTS.md)
|
||||
- [x] Decision: No auto-window toggling behavior (keep settings static)
|
||||
- [x] Decision: No motion plugin (skip leap/flash)
|
||||
- [x] Decision: Move undotree to separate Phase 6.8
|
||||
- [x] UX settings to add: signcolumn, cursorline, colorcolumn
|
||||
|
||||
## Phase 6.2 — Core UX settings
|
||||
- [x] Add signcolumn=yes (always show gutter for LSP/git)
|
||||
- [x] Add cursorline (highlight current line)
|
||||
- [x] Add colorcolumn=80,120 (visual guides)
|
||||
- [x] No cursorcolumn (excluded as per AGENTS.md)
|
||||
- [x] No per-window autocommands (keep simple)
|
||||
|
||||
## Phase 6.3 — Comment.nvim
|
||||
- [x] Add `numToStr/Comment.nvim`
|
||||
- [x] Configure for gcc/gc commenting
|
||||
- [x] Add keymaps if needed
|
||||
|
||||
## Phase 6.4 — Surround
|
||||
- [x] Add `kylechui/nvim-surround`
|
||||
- [x] Minimal config with default keymaps (ys, ds, cs)
|
||||
|
||||
## Phase 6.5 — Autopairs
|
||||
- [x] Add `windwp/nvim-autopairs`
|
||||
- [x] Integrate with nvim-cmp
|
||||
|
||||
## Phase 6.6 — Indent guides
|
||||
- [x] Add `lukas-reineke/indent-blankline.nvim`
|
||||
- [x] Configure scope highlighting
|
||||
|
||||
## Phase 6.7 — Folding (UFO)
|
||||
- [x] Add `kevinhwang91/nvim-ufo` for folding
|
||||
- [x] Configure with Treesitter and LSP providers
|
||||
- [x] Add fold keymaps (za, zR, zM, etc.)
|
||||
|
||||
## Phase 6.8 — Undotree
|
||||
- [x] Add `mbbill/undotree`
|
||||
- [x] Add keymap to toggle undotree
|
||||
- [x] Configure minimal settings
|
||||
|
||||
## Phase 7 — Git Integration
|
||||
|
||||
## Phase 7.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Gitsigns with minimal config - signs in gutter, hunk navigation/actions only
|
||||
- [x] Decision: Skip markdown rendering plugins entirely
|
||||
|
||||
## Phase 7.2 — Gitsigns
|
||||
- [x] Add `lewis6991/gitsigns.nvim`
|
||||
- [x] Configure signs in gutter (add, change, delete, topdelete, changedelete)
|
||||
- [x] Add hunk navigation keymaps (]h/[h for next/prev hunk)
|
||||
- [x] Add hunk action keymaps (stage, reset, preview)
|
||||
- [x] Keep minimal - no inline blame, no advanced features
|
||||
|
||||
## Phase 8 — Copilot
|
||||
|
||||
## Phase 8.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Integrate Copilot into nvim-cmp as completion source
|
||||
- [x] Decision: Auto-trigger suggestions as you type
|
||||
- [x] Decision: No specific Copilot keymaps needed (use existing cmp keymaps)
|
||||
- [x] Decision: Enable for all filetypes
|
||||
- [x] Decision: Copilot suggestions appear before LSP suggestions in completion menu
|
||||
- [x] Node.js v22.21.1 upgraded and confirmed working
|
||||
|
||||
## Phase 8.2 — Copilot setup
|
||||
- [x] Add `zbirenbaum/copilot.lua` + `zbirenbaum/copilot-cmp`
|
||||
- [x] Configure copilot.lua with auto-trigger and all filetypes
|
||||
- [x] Add copilot-cmp as source to nvim-cmp
|
||||
- [x] Set copilot-cmp priority higher than LSP in completion menu
|
||||
- [x] Note: Copilot initializes on first InsertEnter; enter/exit insert mode once before using `:Copilot auth`
|
||||
|
||||
## Phase 9 — Formatting & Linting
|
||||
|
||||
## Phase 9.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Formatters - prettier (JS/TS/CSS/JSON/MD/HTML), phpcbf (PHP), stylua (Lua), black (Python)
|
||||
- [x] Decision: Linters - eslint (JS/TS), phpcs (PHP), markdownlint (Markdown), ruff (Python)
|
||||
- [x] Decision: Project-local executables preferred, fallback to global (node_modules/.bin/, vendor/bin/)
|
||||
- [x] Decision: phpcs/phpcbf already installed globally with WordPress coding standards - no installation needed
|
||||
- [x] Decision: Format-on-save enabled by default with toggle capability
|
||||
- [x] Decision: Manual format keymaps: `<leader>lf` (normal), `<leader>lf` (visual range)
|
||||
- [x] Decision: Respect project config files (.prettierrc, phpcs.xml, .eslintrc, pyproject.toml, etc.)
|
||||
- [x] Strategy: Helper function detects project-local executables first, then global
|
||||
- [x] WordPress: phpcs.xml in project root or --standard=WordPress flag for WordPress projects
|
||||
- [x] Philosophy: Formatters are authoritative source of truth; Neovim settings should match formatter rules per filetype
|
||||
- [x] Note: Phase 9.4 will align Neovim editor settings (tabstop, shiftwidth, expandtab) with formatter configurations
|
||||
|
||||
## Phase 9.2 — none-ls setup with project-aware executables
|
||||
- [x] Add `nvimtools/none-ls.nvim`
|
||||
- [x] Create helper function to detect project-local executables (node_modules/.bin/, vendor/bin/, Mason bin)
|
||||
- [x] Configure formatters:
|
||||
- [x] prettier (project-local first, then Mason, then global)
|
||||
- [x] phpcbf (project-local first, then global system install - already available)
|
||||
- [x] stylua (Mason installed)
|
||||
- [x] Add `mfussenegger/nvim-lint` for linting (none-ls removed most linters from builtins)
|
||||
- [x] Configure linters via nvim-lint:
|
||||
- [x] eslint_d (project-local first, then Mason, then global - daemon version for speed)
|
||||
- [x] phpcs (project-local first, then global system install - already available)
|
||||
- [x] markdownlint (Mason installed)
|
||||
- [x] Add format-on-save autocommand with toggle capability (`<leader>lt` to toggle)
|
||||
- [x] Add manual format keymaps: `<leader>lf` (buffer), `<leader>lf` (visual range)
|
||||
- [x] Ensure WordPress coding standards work via phpcs.xml or --standard flag
|
||||
- [x] Search order: project node_modules/.bin/ → project vendor/bin/ → Mason bin → system PATH
|
||||
- [x] Note: Linting runs on BufEnter, BufWritePost, InsertLeave events
|
||||
|
||||
## Phase 9.3 — Mason formatter/linter installation
|
||||
- [x] Add `WhoIsSethDaniel/mason-tool-installer.nvim` for automated installation
|
||||
- [x] Install via Mason: prettier, eslint_d, markdownlint, stylua, black, ruff
|
||||
- [x] Note: phpcs/phpcbf already installed globally, skip Mason installation
|
||||
- [x] Verify all tools available: Tools installed to ~/.local/share/nvim/mason/bin/
|
||||
|
||||
## Phase 9.4 — Align Neovim settings with formatter rules
|
||||
- [x] Configure per-filetype settings to match formatter defaults
|
||||
- [x] PHP: tabs, 2-width display (WordPress standards)
|
||||
- [x] JS/TS/CSS/JSON/HTML: spaces, 2-width (Prettier defaults)
|
||||
- [x] Lua: spaces, 2-width (common Neovim convention)
|
||||
- [x] Markdown: spaces, 2-width (Prettier defaults)
|
||||
- [x] Python: spaces, 4-width (Black/PEP 8 defaults)
|
||||
- [x] Use autocmds in lua/autocmds.lua for filetype-specific tabstop, shiftwidth, expandtab
|
||||
- [x] Set global defaults: 4-width, spaces (reasonable baseline)
|
||||
- [x] Goal: Manual editing feels natural and matches what formatter will produce on save
|
||||
- [x] Note: All settings kept explicit per-filetype for clarity and maintainability
|
||||
|
||||
## Phase 10 — Migrate Kept Behaviours
|
||||
|
||||
## Phase 10.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Port abbreviations to Lua via vim.cmd.iabbrev
|
||||
- [x] Decision: Port shell template auto-loading via autocmd + BufReadPost
|
||||
- [x] Decision: Whitespace highlighting already handled via listchars (Phase 3.2)
|
||||
- [x] Decision: Skip persistent folds (UFO handles folding, no explicit persistence needed)
|
||||
|
||||
## Phase 10.2 — Abbreviations
|
||||
- [x] Abbreviations: `adn→and`, `waht→what`, `tehn→then`, `functin→function`, `positin→position`
|
||||
- [x] Created dedicated `lua/abbreviations.lua` for modularity and easier maintenance
|
||||
|
||||
## Phase 10.3 — Templates
|
||||
- [x] Templates: auto-populate new `.sh` from template
|
||||
- [x] Added BufNewFile autocmd for *.sh in lua/autocmds.lua
|
||||
|
||||
## Phase 10.4 — Whitespace highlighting
|
||||
- [x] Whitespace highlighting (modern approach)
|
||||
- [x] Note: Already handled via listchars in Phase 3.2 (settings.lua)
|
||||
|
||||
## Phase 10.5 — Persistent folds
|
||||
- [x] Persistent folds (via UFO) -- no need, this is no longer required.
|
||||
- [x] Note: UFO handles folding; no explicit persistence mechanism needed
|
||||
|
||||
## Phase 11 — Colorscheme: Modern Paper Tonic
|
||||
|
||||
## Phase 11.1 — Confirm scope and priorities
|
||||
- [x] Confirm scope and priorities for this phase
|
||||
- [x] Decision: Create modern Paper Tonic fork from scratch
|
||||
- [x] Decision: Name = "paper-tonic-modern"
|
||||
- [x] Decision: Location = inside nvim config initially, move to repo later
|
||||
- [x] Decision: Structure = modular Lua colorscheme (colors.lua, groups/*.lua)
|
||||
- [x] Phased approach:
|
||||
- Phase 11.2-11.4: Extract palette and base groups
|
||||
- Phase 11.5-11.6: General TreeSitter highlights (modern @* groups)
|
||||
- Phase 11.7: Semantic highlighting (custom CSS/HTML captures)
|
||||
- Phase 11.8: Plugin support (LSP, Telescope, Gitsigns, etc.)
|
||||
|
||||
## Phase 11.2 — Extract Paper Tonic color palette
|
||||
- [x] Create `lua/paper-tonic-modern/colors.lua`
|
||||
- [x] Extract all `c_*` color variables from Paper Tonic
|
||||
- [x] Document what each color represents (foreground, background, accent colors)
|
||||
- [x] Convert to modern format (keep hex, 256-color, ANSI mappings)
|
||||
|
||||
## Phase 11.3 — Create colorscheme structure
|
||||
- [x] Create directory structure:
|
||||
- `colors/paper-tonic-modern.lua` (entry point)
|
||||
- `lua/paper-tonic-modern/init.lua` (main logic)
|
||||
- `lua/paper-tonic-modern/colors.lua` (palette)
|
||||
- `lua/paper-tonic-modern/groups/` (highlight group definitions)
|
||||
- [x] Create helper function for setting highlights
|
||||
- [x] Set up colorscheme loading mechanism
|
||||
|
||||
## Phase 11.4 — Base vim highlight groups
|
||||
- [x] Create `lua/paper-tonic-modern/groups/editor.lua`
|
||||
- [x] Map Paper Tonic colors to base groups: Normal, Comment, LineNr, CursorLine, etc.
|
||||
- [x] Create `lua/paper-tonic-modern/groups/syntax.lua`
|
||||
- [x] Map to syntax groups: Function, String, Keyword, Identifier, etc.
|
||||
- [x] Test with simple Lua file to verify base colors work
|
||||
|
||||
## Phase 11.5 — Modern TreeSitter highlight groups
|
||||
- [x] Create `lua/paper-tonic-modern/groups/treesitter.lua`
|
||||
- [x] Map modern `@*` groups to Paper Tonic colors:
|
||||
- Core: @variable, @function, @keyword, @string, @number, @boolean, @comment
|
||||
- Types: @type, @property, @field, @parameter
|
||||
- Operators: @operator, @punctuation.delimiter, @punctuation.bracket
|
||||
- Language constructs: @keyword.function, @keyword.return, @keyword.conditional
|
||||
- [x] Use `:help treesitter-highlight-groups` as reference
|
||||
- [x] Test with multiple languages: Lua, PHP, JavaScript, HTML, CSS
|
||||
|
||||
## Phase 11.6 — Language-specific TreeSitter groups
|
||||
- [x] Add language-specific overrides (e.g., @variable.php, @tag.html)
|
||||
- [x] Ensure HTML tags, CSS selectors, PHP variables have appropriate colors
|
||||
- [x] Test across primary languages (HTML, PHP, JS, CSS, Markdown)
|
||||
- [x] Added comprehensive language-specific groups:
|
||||
- CSS/SCSS: properties, variables, functions (green c2 tones)
|
||||
- HTML: tags, attributes, delimiters (blue c3)
|
||||
- PHP: variables, functions, methods, built-ins (primary brownish-red)
|
||||
- JavaScript/TypeScript: variables, functions, properties, JSX tags (primary + blue for JSX)
|
||||
- Lua: variables, functions, built-ins (primary)
|
||||
- Markdown: headings, links, code blocks (primary for structure)
|
||||
- JSON: properties, strings, numbers (neutral)
|
||||
- Bash: variables, functions, built-ins (primary)
|
||||
|
||||
## Phase 11.7 — Semantic highlighting (custom captures)
|
||||
- [x] Create `lua/paper-tonic-modern/groups/semantic.lua`
|
||||
- [x] Define your custom semantic captures:
|
||||
- @CssClassName (for CSS .class and HTML class="" - same color)
|
||||
- @CssIdentifier (for CSS #id and HTML id="" - same color)
|
||||
- @DataAttribute, @DataAttributeValue (HTML data-* attributes)
|
||||
- @cssPseudoClass, @cssNestingSelector, @CssUniversalSelector (CSS-specific)
|
||||
- [x] Verify cross-language consistency: class names in HTML match CSS
|
||||
- [x] Implemented semantic highlights:
|
||||
- CSS: @CssClassName (green c2), @CssIdentifier (strong green c2_strong), @cssPseudoClass (weak green c2_weak)
|
||||
- CSS: @cssNestingSelector (strong green), @CssUniversalSelector (SpecialChar)
|
||||
- CSS: @CssProp (primary_weak), @CssPropertyValue (bold), @CssUnit (Delimiter)
|
||||
- HTML: @ClassNameAttribute, @IdAttribute, @DataAttribute (all fg_weak for attribute names)
|
||||
- HTML: @DataAttributeValue (Function)
|
||||
- Cross-language: class values and #id values in HTML use same colors as CSS selectors
|
||||
- [ ] Test with existing custom queries (after/queries/css/highlights.scm, after/queries/html/highlights.scm)
|
||||
|
||||
## Phase 11.8 — Plugin highlight groups
|
||||
- [x] Create `lua/paper-tonic-modern/groups/lsp.lua`
|
||||
- [x] Define LSP diagnostics: DiagnosticError, DiagnosticWarn, DiagnosticHint, DiagnosticInfo
|
||||
- [x] Define LSP UI: LspReferenceText, LspReferenceRead, LspReferenceWrite
|
||||
- [x] Create `lua/paper-tonic-modern/groups/plugins.lua`
|
||||
- [x] Add Telescope highlights (TelescopeNormal, TelescopeBorder, TelescopeSelection)
|
||||
- [x] Add Gitsigns highlights (GitSignsAdd, GitSignsChange, GitSignsDelete)
|
||||
- [x] Add nvim-cmp highlights (CmpItemKind*, CmpItemMenu, etc.)
|
||||
- [x] Add Oil.nvim highlights if needed
|
||||
|
||||
**Notes**:
|
||||
- LSP diagnostics use red (error), orange (warn), blue (info), green (hint)
|
||||
- LSP references use cyan backgrounds with varying intensity (text/read/write)
|
||||
- LSP semantic tokens link to TreeSitter groups for consistency
|
||||
- Telescope uses neutral colors with primary accent for matching and selection
|
||||
- Gitsigns uses status colors: green (add), blue (change), red (delete)
|
||||
- nvim-cmp uses primary tones for kinds, bold for matching text
|
||||
- Oil.nvim uses bold for directories, status colors for permissions and operations
|
||||
- indent-blankline and ufo use subtle grays for non-intrusive UI
|
||||
|
||||
## Phase 11.9 — Update plugin configuration
|
||||
- [x] Update `lua/plugins/colorscheme.lua` to use paper-tonic-modern
|
||||
- [x] Remove old Paper Tonic reference
|
||||
- [x] Remove colorscheme-overrides.lua (no longer needed)
|
||||
- [x] Test full config reload
|
||||
|
||||
**Notes**:
|
||||
- `lua/plugins/colorscheme.lua` already updated to load `paper-tonic-modern`
|
||||
- Old `paper-tonic/` directory moved to `legacy/paper-tonic-original/` (archived)
|
||||
- No `colorscheme-overrides.lua` existed (not needed with modern implementation)
|
||||
- Full config reload tested: Normal ✓, DiagnosticError ✓, TelescopeNormal ✓, GitSignsAdd ✓
|
||||
- Colorscheme loads correctly: `vim.g.colors_name = 'paper-tonic-modern'`
|
||||
|
||||
## Phase 11.10 — Validation and polish
|
||||
- [ ] Test all primary languages (Lua, PHP, HTML, CSS, JS, Markdown)
|
||||
- [ ] Verify semantic consistency (CSS classes in HTML match CSS files)
|
||||
- [ ] Check plugin UI colors (Telescope, Gitsigns, nvim-cmp)
|
||||
- [ ] Verify LSP diagnostics are visible and distinct
|
||||
- [ ] Document color scheme in README
|
||||
|
||||
## Phase 11.11 — Extract to separate repo (later)
|
||||
- [ ] Move to `~/projects/paper-tonic-modern/`
|
||||
- [ ] Update plugin config to point to new location
|
||||
- [ ] Add proper README, LICENSE, screenshots
|
||||
- [ ] Consider publishing to GitHub
|
||||
|
||||
## Phase 12 — Cleanup & Validation
|
||||
|
||||
## Phase 12.1 — Confirm scope and priorities
|
||||
- [ ] Confirm scope and priorities for this phase
|
||||
|
||||
## Phase 12.2 — Retire legacy files
|
||||
- [ ] Retire legacy Vimscript files (keep for reference until verified)
|
||||
|
||||
## Phase 12.3 — Startup performance
|
||||
- [ ] Validate startup performance (no errors, fast launch)
|
||||
|
||||
## Phase 12.4 — Navigation validation
|
||||
- [ ] Validate Telescope navigation + LSP jumps
|
||||
- [ ] Validate netrw browsing and preview splits
|
||||
- [ ] Validate Oil.nvim file operations
|
||||
|
||||
## Phase 12.5 — Language tooling validation
|
||||
- [ ] Validate HTML/PHP/JS/Markdown tooling
|
||||
- [ ] Verify LSP (gd, gr, K, diagnostics)
|
||||
- [ ] Verify formatting (prettier, phpcbf, stylua)
|
||||
- [ ] Verify linting (eslint_d, phpcs, markdownlint)
|
||||
|
||||
## Phase 12.6 — Final polish
|
||||
- [x] Review all keymaps and ensure they're documented (README.md + :KeymapsGuide)
|
||||
- [ ] Update LOG.md with final architecture and usage
|
||||
- [ ] Clean up any remaining debug code or temporary comments
|
||||
|
||||
---
|
||||
|
||||
Notes:
|
||||
- Keep plugin specs minimal; configure in their own `lua/plugins/*.lua` files.
|
||||
- Avoid adding plugins not listed in the guide unless explicitly requested.
|
||||
- Prefer simple defaults; only add settings that clearly improve workflow.
|
||||
- Plugin approval policy: unlisted plugins may be proposed, but must be explicitly confirmed before installation.
|
||||
|
||||
Known Issues / Follow-ups:
|
||||
- lua-language-server (lua_ls) from Mason failed to start due to missing shared library `libbfd-2.38-system.so`. **RESOLVED**: Installed lua-language-server via system package manager (pacman) instead of Mason. Removed `lua_ls` from Mason's ensure_installed list in `lua/plugins/mason-lspconfig.lua`.
|
||||
- LSP root detection: In some cases, the parent repository is picked as the root (e.g., when a workspace lives inside another repo). Workaround: create an empty `.git` directory (or a marker like `.nvimroot`) in the intended workspace root to pin the project root for LSPs.
|
||||
|
||||
Decisions & Changes:
|
||||
- **Neoconf dropped**: folke/neoconf.nvim incompatible with Neovim 0.11+ vim.lsp.config API (GitHub issue #116, open since May 2024, no resolution). Migrated to native `exrc` + `secure` approach.
|
||||
- **vim.lsp.config migration**: Migrated from deprecated `require('lspconfig')[server].setup()` to `vim.lsp.config()` + `vim.lsp.enable()` (Neovim 0.11+ native API).
|
||||
- **Project config format**: `.nvim.lua` files return `{ lsp = { [server_name] = { settings = {...} } } }`.
|
||||
- **Security model**: `secure` mode prompts user to trust `.nvim.lua` files before execution (one-time per file hash).
|
||||
- **Settings loading**: `on_new_config` hook loads project settings from actual `root_dir` (not cwd), ensuring correct behavior across different workspace structures.
|
||||
- **Phase 4 Navigation Strategy**: Skipped Neo-tree in favor of built-in netrw for visual context and project structure browsing. Telescope for fuzzy finding. Oil.nvim for file manipulation (evaluation phase; alternative is mini.files). Rationale: User needs visual context and preview, not per-tab roots or complex tree features. File manipulation primarily done in shell, but Oil.nvim handles buffer sync issues when renaming/moving files.
|
||||
340
README.md
340
README.md
|
|
@ -2,11 +2,6 @@
|
|||
|
||||
Living reference for session management, keymaps, commands, and plugin-specific features in this config.
|
||||
|
||||
The active runtime is Neovim 0.12.6 through `~/.local/bin/nvim`. Neovim 0.11.5 remains available at `/opt/neovim/nvim-linux-x86_64/bin/nvim` for emergency rollback; the config starts there with 0.12-only native completion and Undotree disabled.
|
||||
|
||||
Persistent undo files are stored outside this repository in
|
||||
`stdpath('state')/undo` (normally `~/.local/state/nvim/undo`).
|
||||
|
||||
## Session Management
|
||||
|
||||
Session support is automatic but user-controlled:
|
||||
|
|
@ -19,8 +14,6 @@ Session support is automatic but user-controlled:
|
|||
**Auto-load/save** (via `lua/autocmds.lua`):
|
||||
- On startup: auto-loads `Session.vim` if it exists (unless files specified on command line)
|
||||
- On exit: auto-saves to `Session.vim` if it already exists
|
||||
- Netrw and its preview windows are omitted from the saved layout; generated `NetrwTreeListing` buffers are not restorable
|
||||
- Missing files are removed from restored buffers and argument lists, so deleted files cannot become persistent empty session buffers
|
||||
- Sessions are per-directory and opt-in (just create one to start using)
|
||||
|
||||
**Stop using a session**:
|
||||
|
|
@ -47,107 +40,22 @@ Core keymaps available globally (not plugin-specific). These provide fallbacks f
|
|||
| n | `gr` | LSP references placeholder | `<Nop>` so LSP buffers can override cleanly |
|
||||
| n | `gI` | LSP implementation placeholder | `<Nop>` so LSP buffers can override cleanly |
|
||||
| n | `K` | Keyword help fallback | Uses `keywordprg` (e.g., `man`) when LSP hover is unavailable |
|
||||
| n | `<leader>co` | Quickfix: Open | Opens quickfix window |
|
||||
| n | `<leader>cc` | Quickfix: Close | Closes quickfix window |
|
||||
| n | `<leader>lo` | Location list: Open | Opens location list window |
|
||||
| n | `<leader>lc` | Location list: Close | Closes location list window |
|
||||
| n | `<leader>xx` | Diagnostics → location list | Populates current buffer diagnostics |
|
||||
| n | `<leader>xX` | Diagnostics → quickfix | Populates project-wide diagnostics |
|
||||
| n | `<leader>xe` | Diagnostics → buffer errors | Location list filtered to errors |
|
||||
| n | `<leader>xE` | Diagnostics → all errors | Quickfix filtered to errors |
|
||||
| n | `[d` | Diagnostics: previous item | Uses `vim.diagnostic.jump` with a negative count |
|
||||
| n | `]d` | Diagnostics: next item | Uses `vim.diagnostic.jump` with a positive count |
|
||||
| n | `[d` | Diagnostics: previous item | Uses `vim.diagnostic.goto_prev` |
|
||||
| n | `]d` | Diagnostics: next item | Uses `vim.diagnostic.goto_next` |
|
||||
| n | `<leader>xd` | Diagnostic float | Opens hover window for cursor diagnostic |
|
||||
| n | `<leader>xt` | Toggle diagnostics | Flips `vim.diagnostic.enable()` |
|
||||
| n | `<leader>gg` | Git: Changed files → quickfix | Lists all modified/deleted/untracked files with status |
|
||||
| n | `<leader>hi` | Highlight inspector | Shows highlight/capture stack under cursor |
|
||||
| n | `<leader>bg` | Toggle background (light/dark) | Switches between light and dark colorscheme modes |
|
||||
|
||||
### `lua/netrw-config.lua`
|
||||
|
||||
#### `:Ex` Command Variants
|
||||
|
||||
| Command | Opens netrw at |
|
||||
| --- | --- |
|
||||
| `:Ex` | Current working directory (`:pwd`) |
|
||||
| `:Ex .` | Current file's directory |
|
||||
| `:Ex %:h` | Current file's directory (explicit) |
|
||||
| `:Ex /path/to/dir` | Specific path |
|
||||
|
||||
#### Custom Keymaps
|
||||
|
||||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| n | `<leader>nt` | Open netrw in new tab at current file's directory |
|
||||
| n | `<leader>nT` | Open netrw in new tab at project root |
|
||||
| n | `<leader>nr` | Open netrw in current window at project root |
|
||||
| n | `<C-6>` / `<C-^>` | Jump to alternate file, skipping netrw explorer buffers |
|
||||
|
||||
**Note:** Project root is stored as the initial working directory when Neovim starts. This allows navigation back to the project root even after following symlinks to external directories.
|
||||
|
||||
#### Default Netrw Keymaps
|
||||
|
||||
##### Navigation & View
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `<CR>` | Open file/directory under cursor |
|
||||
| `-` | Go up to parent directory |
|
||||
| `gh` | Toggle hidden files visibility (dotfiles) |
|
||||
| `i` | Cycle through view types (thin/long/wide/tree) |
|
||||
| `s` | Cycle sort order (name/time/size/extension) |
|
||||
| `r` | Reverse current sort order |
|
||||
| `I` | Toggle netrw banner (help text) |
|
||||
|
||||
##### Preview & Splits
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `p` | Toggle the selected file/directory preview and live cursor updates |
|
||||
| `j` / `k` | Update an existing preview to the newly selected entry |
|
||||
| `<M-j>` / `<M-k>` | Scroll the preview down/up without leaving netrw; accepts a count |
|
||||
| `:pclose` / `<C-w>z` | Close the preview and stop live updates |
|
||||
| `P` | Open file in previous window |
|
||||
| `o` | Open file in horizontal split below |
|
||||
| `v` | Open file in vertical split |
|
||||
| `t` | Open file in a new tab |
|
||||
|
||||
Regular files use netrw's native preview. Directories show a read-only summary of
|
||||
their immediate children, including type, file size, modification time, and a
|
||||
total for immediate files. Directories appear first, output is capped at 200
|
||||
entries, and symbolic links are displayed without following them recursively.
|
||||
File previews retain Tree-sitter or Vim syntax highlighting while suppressing
|
||||
diagnostics and indent guides. The buffer's prior diagnostic and indent-guide
|
||||
state returns automatically when a previewed file is opened for editing.
|
||||
Preview-only file buffers remain loaded but unlisted until Neovim exits, retaining
|
||||
the lifecycle protection added for rapid preview replacement.
|
||||
|
||||
Opening a file with `<CR>`, `o`, `v`, or `t`, or otherwise leaving netrw, closes
|
||||
the preview. Closing it manually or pressing `p` again disables live updates
|
||||
until `p` is pressed again. Enhanced directory summaries apply to local paths
|
||||
(including local paths when Neovim runs over SSH); netrw URI browsing retains
|
||||
its native preview behavior.
|
||||
|
||||
##### File Operations
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `%` | Create new file (prompts for name) |
|
||||
| `d` | Create new directory (prompts for name) |
|
||||
| `D` | Delete file/directory under cursor |
|
||||
| `R` | Rename/move file under cursor |
|
||||
|
||||
##### Marking & Batch Operations
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `mf` | Mark file (for batch operations) |
|
||||
| `mr` | Mark files using regex pattern |
|
||||
| `mu` | Unmark all marked files |
|
||||
| `mt` | Set mark target directory (for move/copy destination) |
|
||||
| `mc` | Copy marked files to target directory |
|
||||
| `mm` | Move marked files to target directory |
|
||||
| `qf` | Display file info |
|
||||
| n | `<leader>te` | Open netrw in a new tab rooted at current file directory |
|
||||
| n | `<leader>tE` | Open netrw in a new tab rooted at project cwd |
|
||||
|
||||
## Plugin Reference
|
||||
|
||||
|
|
@ -165,7 +73,7 @@ Buffer-local keymaps available when an LSP client attaches:
|
|||
| n | `gI` | LSP: implementation |
|
||||
| n | `K` | LSP hover |
|
||||
|
||||
### Conform (Formatting) `lua/plugins/conform.lua`
|
||||
### None-ls (Formatting) `lua/plugins/none-ls.lua`
|
||||
|
||||
#### Keymaps
|
||||
|
||||
|
|
@ -206,7 +114,6 @@ Buffer-local keymaps available when inside a git repository:
|
|||
| n | `<leader>hp` | Preview hunk |
|
||||
| n | `<leader>hd` | Diff against index |
|
||||
| n | `<leader>hD` | Diff against previous commit (`~`) |
|
||||
| n | `<leader>hq` | Send all hunks to quickfix list |
|
||||
| o/x | `ih` | Text object: select git hunk |
|
||||
|
||||
### Telescope `lua/plugins/telescope.lua`
|
||||
|
|
@ -253,6 +160,38 @@ Buffer-local keymaps available when inside a git repository:
|
|||
| --- | --- | --- | --- |
|
||||
| `buffers` picker | i | `<C-d>` | Delete highlighted buffer |
|
||||
|
||||
### Oil `lua/plugins/oil.lua`
|
||||
|
||||
#### Keymaps
|
||||
|
||||
##### Global launcher mappings
|
||||
|
||||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| n | `<leader>fo` | Open Oil in current window |
|
||||
| n | `<leader>fO` | Open Oil in floating window |
|
||||
|
||||
##### Oil buffer mappings (`opts.keymaps`)
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `g?` | Show Oil help |
|
||||
| `<CR>` | Open entry in current window |
|
||||
| `<C-s>` | Open entry in vertical split |
|
||||
| `<C-h>` | Open entry in horizontal split |
|
||||
| `<C-t>` | Open entry in new tab |
|
||||
| `<C-p>` | Preview entry (vertical split belowright) |
|
||||
| `<C-c>` | Close Oil |
|
||||
| `<C-l>` | Refresh |
|
||||
| `-` | Go to parent directory |
|
||||
| `_` | Open Neovim cwd |
|
||||
| `` ` `` | `:cd` into entry |
|
||||
| `~` | `:tcd` into entry |
|
||||
| `gs` | Change sort mode |
|
||||
| `gx` | Open entry externally |
|
||||
| `g.` | Toggle hidden files |
|
||||
| `g\` | Toggle trash visibility |
|
||||
|
||||
### UFO (Folding) `lua/plugins/ufo.lua`
|
||||
|
||||
#### Keymaps
|
||||
|
|
@ -267,32 +206,27 @@ Buffer-local keymaps available when inside a git repository:
|
|||
| preview window | `<C-u>` / `<C-d>` | Scroll within UFO preview |
|
||||
| preview window | `[` / `]` | Jump to top/bottom of preview |
|
||||
|
||||
### Native Undotree `lua/keymaps.lua`
|
||||
### Undotree `lua/plugins/undotree.lua`
|
||||
|
||||
#### Keymaps
|
||||
|
||||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| n | `<leader>u` | Toggle Neovim's native Undotree panel (`:Undotree`) |
|
||||
| n | `<leader>u` | Toggle Undotree panel |
|
||||
|
||||
### Treesitter `lua/plugins/treesitter.lua`
|
||||
|
||||
The Neovim 0.12-compatible `main` branches are used for both nvim-treesitter
|
||||
and nvim-treesitter-textobjects. Highlighting and incremental selection use
|
||||
Neovim's native APIs; textobjects use explicit plugin mappings. Parser builds
|
||||
require `tree-sitter-cli` 0.26.1 or newer (`tree-sitter --version`).
|
||||
|
||||
#### Keymaps
|
||||
|
||||
##### Incremental selection
|
||||
|
||||
| Key | Description |
|
||||
| --- | --- |
|
||||
| `+` | Initialize/expand selection to the parent node |
|
||||
| `+` | Initialize/expand selection |
|
||||
| `g+` | Expand to scope |
|
||||
| `-` | Shrink selection to the child node |
|
||||
| `-` | Shrink selection |
|
||||
|
||||
##### Textobject selection
|
||||
##### Textobject selection (`select.keymaps`)
|
||||
|
||||
| Key | Target |
|
||||
| --- | --- |
|
||||
|
|
@ -303,7 +237,7 @@ require `tree-sitter-cli` 0.26.1 or newer (`tree-sitter --version`).
|
|||
| `al` / `il` | Loop outer / inner |
|
||||
| `a/` | Comment outer |
|
||||
|
||||
##### Textobject movement
|
||||
##### Textobject movement (`move` mappings)
|
||||
|
||||
| Key | Action |
|
||||
| --- | --- |
|
||||
|
|
@ -335,8 +269,6 @@ require `tree-sitter-cli` 0.26.1 or newer (`tree-sitter --version`).
|
|||
|
||||
### Nvim-surround `lua/plugins/surround.lua`
|
||||
|
||||
The configuration uses nvim-surround v4's default mappings.
|
||||
|
||||
#### Keymaps
|
||||
|
||||
| Mode | Mapping | Description |
|
||||
|
|
@ -353,33 +285,17 @@ The configuration uses nvim-surround v4's default mappings.
|
|||
| normal | `cs{old}{new}` | Change surround |
|
||||
| normal | `cS{old}{new}` | Change surround (linewise) |
|
||||
|
||||
### Native Completion `lua/completion.lua`
|
||||
### Nvim-cmp (Completion) `lua/plugins/cmp.lua`
|
||||
|
||||
#### Keymaps
|
||||
|
||||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| insert | `<C-Space>` | Manually trigger LSP completion |
|
||||
| insert | `<C-Space>` | Manually trigger completion |
|
||||
| insert | `<CR>` | Confirm selection (selects first item by default) |
|
||||
| insert | `<C-n>` | Next completion item |
|
||||
| insert | `<C-p>` | Previous completion item |
|
||||
| insert | `<C-y>` | Accept the explicitly selected completion item |
|
||||
| insert | `<C-e>` | Dismiss the completion menu |
|
||||
| insert | `<C-x><C-n>` | Complete words from the current buffer |
|
||||
| insert | `<C-x><C-f>` | Complete a filesystem path |
|
||||
| insert/select | `<Tab>` / `<S-Tab>` | Jump forward/backward through native snippet tabstops |
|
||||
|
||||
Completion opens automatically after a 150 ms delay, uses fuzzy matching, and does not preselect an item. LSP buffers prioritize language-aware results exclusively; buffer words remain available explicitly with `<C-x><C-n>`. Buffers without an LSP autocomplete from a bounded set of nearby words. Native completion is disabled in Telescope prompts so it does not obscure picker results.
|
||||
|
||||
### Copilot Inline Suggestions `lua/plugins/copilot.lua`
|
||||
|
||||
Copilot appears as ghost text rather than as an item in the native completion menu. Suggestions are hidden while that menu is visible.
|
||||
|
||||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| insert | `<M-l>` | Accept the visible Copilot suggestion |
|
||||
| insert | `<M-]>` | Show the next Copilot suggestion |
|
||||
| insert | `<M-[>` | Show the previous Copilot suggestion |
|
||||
| insert | `<C-]>` | Dismiss the Copilot suggestion |
|
||||
| insert | `<C-e>` | Abort completion menu |
|
||||
|
||||
### Nvim-autopairs `lua/plugins/autopairs.lua`
|
||||
|
||||
|
|
@ -388,165 +304,3 @@ Copilot appears as ghost text rather than as an item in the native completion me
|
|||
| Mode | Key | Description |
|
||||
| --- | --- | --- |
|
||||
| insert | `<M-e>` | Fast wrap the previous text with a pair |
|
||||
|
||||
## Configuration
|
||||
|
||||
### Colorscheme
|
||||
|
||||
`paper-tonic-modern` is built into this repository and loaded from `colors/paper-tonic-modern.lua`. Its modular highlight definitions live under `lua/paper-tonic-modern/` and cover the editor UI, traditional syntax, Tree-sitter captures, LSP diagnostics, and the configured plugins.
|
||||
|
||||
The theme follows the system light/dark preference at startup. Use `<leader>bg` to toggle the background manually. Custom HTML and CSS Tree-sitter queries keep matching classes and IDs visually consistent across both languages.
|
||||
|
||||
### Project-Local LSP Settings
|
||||
|
||||
Native `exrc` and `secure` support are enabled. A trusted `.nvim.lua` can return an `lsp` table keyed by server name; settings are securely read from the attached LSP client's root and sent through `workspace/didChangeConfiguration`.
|
||||
|
||||
```lua
|
||||
return {
|
||||
lsp = {
|
||||
intelephense = {
|
||||
settings = {
|
||||
intelephense = {
|
||||
environment = {
|
||||
includePaths = { "vendor/package/src" },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
### Formatting & Linting
|
||||
|
||||
This config uses **conform.nvim** for formatting and **nvim-lint** for diagnostics. Both prefer project-local tools over global installations.
|
||||
|
||||
#### Executable Resolution Order
|
||||
|
||||
When looking for formatters/linters, the config searches in this priority:
|
||||
|
||||
1. **Project-local** (e.g., `node_modules/.bin/`, `vendor/bin/`)
|
||||
2. **Mason-managed** (`~/.local/share/nvim/mason/bin/`)
|
||||
3. **System PATH** (globally installed tools)
|
||||
|
||||
Conform.nvim handles this resolution automatically via its built-in `util.find_executable()`. nvim-lint uses a custom `find_executable()` helper in `lua/plugins/nvim-lint.lua`.
|
||||
|
||||
#### Configured Tools
|
||||
|
||||
**Formatters** (`lua/plugins/conform.lua`):
|
||||
- **JavaScript/TypeScript/CSS/JSON/HTML/Markdown**: `prettier`
|
||||
- **PHP**: `phpcbf` (WordPress standard by default)
|
||||
- **Lua**: `stylua`
|
||||
- **Python**: `ruff_format`
|
||||
|
||||
**Linters** (`lua/plugins/nvim-lint.lua`):
|
||||
- **JavaScript/TypeScript**: `eslint_d`
|
||||
- **PHP**: `phpcs` (WordPress standard by default)
|
||||
- **Markdown**: `markdownlint` (disabled by default; use `:MarkdownLintEnable`)
|
||||
- **Python**: handled by `ruff` LSP (not nvim-lint)
|
||||
|
||||
#### Project-Specific Overrides
|
||||
|
||||
Both formatters and linters respect project-level configuration files:
|
||||
|
||||
**PHP** (phpcbf + phpcs):
|
||||
- Create `phpcs.xml` or `phpcs.xml.dist` in your project root
|
||||
- When present, this file controls the coding standard (e.g., PSR-12, WordPress, custom)
|
||||
- When absent, defaults to `--standard=WordPress`
|
||||
|
||||
Example `phpcs.xml`:
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="Custom">
|
||||
<description>Project-specific PHP rules</description>
|
||||
<rule ref="PSR12"/>
|
||||
<!-- or: <rule ref="WordPress-Core"/> -->
|
||||
|
||||
<!-- Customize rules -->
|
||||
<rule ref="Generic.Files.LineLength">
|
||||
<properties>
|
||||
<property name="lineLimit" value="120"/>
|
||||
</properties>
|
||||
</rule>
|
||||
</ruleset>
|
||||
```
|
||||
|
||||
**JavaScript/TypeScript** (prettier + eslint):
|
||||
- Project config files: `.prettierrc`, `.eslintrc.json`, `eslint.config.js`, etc.
|
||||
- Global fallback: `~/.eslintrc.json` (when no project config exists)
|
||||
|
||||
**Lua** (stylua):
|
||||
- Project config: `stylua.toml` or `.stylua.toml`
|
||||
- Falls back to stylua defaults if not present
|
||||
|
||||
**Markdown** (markdownlint):
|
||||
- Project config: `.markdownlint.json`, `.markdownlintrc`
|
||||
|
||||
#### Changing Standards Per-Project
|
||||
|
||||
To switch a PHP project from WordPress to PSR-12:
|
||||
|
||||
1. Create `phpcs.xml` in project root:
|
||||
```xml
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="PSR-12">
|
||||
<rule ref="PSR12"/>
|
||||
</ruleset>
|
||||
```
|
||||
|
||||
2. Restart Neovim (or reload config: `:source $MYVIMRC`)
|
||||
|
||||
Both `phpcs` and `phpcbf` will now use PSR-12 rules in that project.
|
||||
|
||||
#### Format-on-Save
|
||||
|
||||
- **Enabled by default** for all supported filetypes
|
||||
- **Toggle**: `<leader>lt` (see keymaps below)
|
||||
- **Manual format**: `<leader>lf` (buffer or visual selection)
|
||||
|
||||
#### Linting Behavior
|
||||
|
||||
- **Automatic**: Runs on `BufEnter`, `BufWritePost`, `InsertLeave`
|
||||
- **Per-filetype**: Configured in `lint.linters_by_ft` table
|
||||
- **Markdown**: Opt-in only (`:MarkdownLintEnable` / `:MarkdownLintDisable`)
|
||||
|
||||
## Configuration Options
|
||||
|
||||
### Tabline Display
|
||||
|
||||
Custom tabline shows intelligent path shortening with two configurable options.
|
||||
|
||||
**Location:** `lua/settings.lua` (configured via `utils.tabline_full_parents` and `utils.tabline_shorten_length`)
|
||||
|
||||
**Configuration Options:**
|
||||
|
||||
1. **`utils.tabline_full_parents`** (default: `1`) - Number of parent directories to show in full
|
||||
2. **`utils.tabline_shorten_length`** (default: `3`) - Number of characters to show for shortened directories
|
||||
|
||||
**Examples:**
|
||||
|
||||
With `full_parents = 1, shorten_length = 3`:
|
||||
- `/path/to/my/project/src/file.txt` → `pat/to/my/project/src/file.txt`
|
||||
|
||||
With `full_parents = 2, shorten_length = 3`:
|
||||
- `/path/to/my/project/src/file.txt` → `pat/to/my/project/src/file.txt`
|
||||
|
||||
With `full_parents = 1, shorten_length = 1`:
|
||||
- `/path/to/my/project/src/file.txt` → `p/t/m/project/src/file.txt`
|
||||
|
||||
With `full_parents = 0, shorten_length = 3`:
|
||||
- `/path/to/my/project/src/file.txt` → `pat/to/my/pro/src/file.txt`
|
||||
|
||||
The last N parent directories are shown in full, earlier directories are shortened to the specified number of characters. The filename itself is always shown in full.
|
||||
|
||||
**To customize:** Edit `utils.tabline_full_parents` and `utils.tabline_shorten_length` values in `lua/settings.lua`
|
||||
|
||||
## Working Directory Behavior
|
||||
|
||||
The working directory (`:pwd`) is locked to the directory where you opened Neovim and does NOT change when switching files:
|
||||
|
||||
- `autochdir` is disabled (working directory stays fixed at project root)
|
||||
- `netrw_keepdir = 1` prevents netrw from changing directory when browsing
|
||||
- Project root is captured at startup in `vim.g.project_root` (used by Telescope and netrw)
|
||||
- Telescope searches from the initial project root regardless of current buffer
|
||||
- Use `:cd <path>` to manually change directory if needed (affects Telescope search scope)
|
||||
|
|
|
|||
129
REGRESSION_FIX_2025-12-07.md
Normal file
129
REGRESSION_FIX_2025-12-07.md
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
# Critical Regression Fix: LSP Project Settings Not Loading (2025-12-07)
|
||||
|
||||
## Summary
|
||||
`gd` (goto definition) stopped working for external library references in `WORKSPACE_TEST/site/external.php`. Even restoring to a git commit where it previously worked didn't fix it, indicating an **environment change** rather than a code regression.
|
||||
|
||||
## Root Cause
|
||||
**Neovim 0.11+ removed support for the `on_new_config` callback in `vim.lsp.config()`.**
|
||||
|
||||
The previous implementation used `on_new_config` to load project-local settings from `.nvim.lua`:
|
||||
|
||||
```lua
|
||||
vim.lsp.config(server_name, {
|
||||
on_new_config = function(new_config, root_dir)
|
||||
-- Load project settings and merge into new_config.settings
|
||||
local project_settings = load_project_lsp_settings(server_name, root_dir)
|
||||
if project_settings.settings then
|
||||
new_config.settings = vim.tbl_deep_extend("force",
|
||||
new_config.settings or {},
|
||||
project_settings.settings)
|
||||
end
|
||||
end,
|
||||
})
|
||||
```
|
||||
|
||||
**Problem**: This callback was **silently ignored** in Neovim 0.11+, resulting in:
|
||||
- Empty `client.settings` (confirmed via `:LspInfo` showing `Settings: {}`)
|
||||
- No `includePaths` sent to intelephense
|
||||
- `gd` failing with "No locations found" for external library symbols
|
||||
|
||||
## Symptoms
|
||||
1. `:LspInfo` showed `Settings: {}` for intelephense
|
||||
2. `gd` on `\ExtLib\Src\Util::greetExternal()` returned "No locations found"
|
||||
3. Local (workspace) symbol navigation worked fine
|
||||
4. Git history restore didn't help (environment issue, not code issue)
|
||||
|
||||
## Solution
|
||||
Use the `LspAttach` autocmd instead of `on_new_config` to load and apply project settings:
|
||||
|
||||
```lua
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
group = vim.api.nvim_create_augroup('lsp_project_settings', { clear = true }),
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if not client then return end
|
||||
|
||||
-- Load project-specific settings from .nvim.lua at client.root_dir
|
||||
local project_settings = load_project_lsp_settings(client.name, client.root_dir)
|
||||
if project_settings.settings then
|
||||
-- Merge into client.settings
|
||||
client.settings = vim.tbl_deep_extend("force",
|
||||
client.settings or {},
|
||||
project_settings.settings)
|
||||
|
||||
-- Notify server of updated settings
|
||||
vim.schedule(function()
|
||||
client.notify("workspace/didChangeConfiguration",
|
||||
{ settings = client.settings })
|
||||
end)
|
||||
end
|
||||
end,
|
||||
})
|
||||
```
|
||||
|
||||
## Validation
|
||||
After fix:
|
||||
```bash
|
||||
cd WORKSPACE_TEST
|
||||
nvim --headless +'e site/external.php' +'lua vim.wait(3000); local clients = vim.lsp.get_clients({name="intelephense"}); if clients[1] then print("Settings:", vim.inspect(clients[1].settings)) end' +quit
|
||||
```
|
||||
|
||||
Output:
|
||||
```lua
|
||||
Settings: {
|
||||
intelephense = {
|
||||
environment = {
|
||||
includePaths = { "/home/ray/.config/nvim/EXTERNAL_TEST" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
✅ Settings now correctly loaded and `gd` works for external symbols.
|
||||
|
||||
## Key Differences: Neovim 0.10 vs 0.11 LSP API
|
||||
|
||||
### Old API (lspconfig plugin, Neovim < 0.11)
|
||||
```lua
|
||||
require('lspconfig').intelephense.setup({
|
||||
on_new_config = function(new_config, root_dir)
|
||||
-- Called when creating new client
|
||||
end,
|
||||
})
|
||||
```
|
||||
|
||||
### New API (native vim.lsp.config, Neovim 0.11+)
|
||||
```lua
|
||||
-- Define config
|
||||
vim.lsp.config('intelephense', { ... })
|
||||
|
||||
-- Enable server
|
||||
vim.lsp.enable('intelephense')
|
||||
|
||||
-- Handle dynamic settings via autocmd
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
callback = function(args)
|
||||
-- Access client, load settings, notify server
|
||||
end,
|
||||
})
|
||||
```
|
||||
|
||||
## Documentation Updated
|
||||
- `LOG.md`: Added decision log entry for 2025-12-07
|
||||
- `.github/copilot-instructions.md`: Now a simple pointer to AGENTS.md
|
||||
- `AGENTS.md`: Already notes "Native exrc + vim.lsp.config migration done"
|
||||
|
||||
## Prevention
|
||||
- Always test LSP functionality after Neovim version upgrades
|
||||
- Check `:help news` for API changes
|
||||
- Validate `:LspInfo` settings are populated correctly
|
||||
- Test with external library references, not just workspace files
|
||||
|
||||
## Files Modified
|
||||
- `lua/plugins/lsp.lua`: Replaced `on_new_config` with `LspAttach` autocmd
|
||||
|
||||
## Timeline
|
||||
- **Before 2025-12-07**: `on_new_config` worked in older Neovim version
|
||||
- **2025-12-07**: Neovim upgraded to 0.11.5, `on_new_config` silently ignored
|
||||
- **2025-12-07**: Diagnosed via `:LspInfo` showing empty settings
|
||||
- **2025-12-07**: Fixed with `LspAttach` pattern, verified working
|
||||
93
TEST_DIAGNOSTICS.md
Normal file
93
TEST_DIAGNOSTICS.md
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# LSP Diagnostic Test Files
|
||||
|
||||
These files are designed to trigger LSP diagnostics of all types to test the Paper Tonic Modern colorscheme's diagnostic virtual text colors.
|
||||
|
||||
## Test Files
|
||||
|
||||
### test-diagnostics.lua
|
||||
Lua file with intentional errors for lua_ls (Lua Language Server).
|
||||
|
||||
**Expected diagnostics:**
|
||||
- **Errors** (red): Undefined variables/functions, type mismatches, invalid operations, wrong argument counts
|
||||
- **Warnings** (orange): Unused variables, shadowing, unreachable code, lowercase globals
|
||||
- **Hints** (green): Redundant code, style issues
|
||||
|
||||
**Note**: lua_ls provides the best mix of diagnostic levels.
|
||||
|
||||
### test-diagnostics.php
|
||||
PHP file with intentional errors for Intelephense (PHP Language Server).
|
||||
|
||||
**Expected diagnostics:**
|
||||
- **Errors** (red): Most issues appear as errors by default in Intelephense
|
||||
- Undefined functions/variables
|
||||
- Type mismatches
|
||||
- Wrong argument counts
|
||||
- Invalid method calls
|
||||
|
||||
**Note**: Intelephense is strict and reports most issues as errors. To see warnings/hints, configure in `.nvim.lua`:
|
||||
```lua
|
||||
return {
|
||||
lsp = {
|
||||
intelephense = {
|
||||
settings = {
|
||||
intelephense = {
|
||||
diagnostics = {
|
||||
undefinedSymbols = true,
|
||||
undefinedVariables = true,
|
||||
unusedSymbols = "hint", -- Show unused as hints
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### test-diagnostics.js
|
||||
JavaScript file with intentional errors for ts_ls (TypeScript Language Server).
|
||||
|
||||
**Expected diagnostics:**
|
||||
- **Errors** (red): Undefined variables/functions, invalid property access, missing parameters
|
||||
- **Warnings** (orange): Unreachable code, type comparison issues, duplicate cases
|
||||
- **Hints** (green): const vs let suggestions
|
||||
- **Info** (blue): Unnecessary operations
|
||||
|
||||
## How to Use
|
||||
|
||||
1. Open any test file in Neovim:
|
||||
```bash
|
||||
nvim test-diagnostics.lua
|
||||
# or
|
||||
nvim test-diagnostics.php
|
||||
# or
|
||||
nvim test-diagnostics.js
|
||||
```
|
||||
|
||||
2. Wait for LSP to attach and analyze the file (1-2 seconds)
|
||||
|
||||
3. Check the virtual text diagnostics at the end of lines with issues
|
||||
|
||||
4. Use `:LspInfo` to verify the LSP server is attached
|
||||
|
||||
## Color Reference
|
||||
|
||||
The Paper Tonic Modern colorscheme uses these colors for diagnostics:
|
||||
|
||||
- **DiagnosticError** (virtual text): `#d70000` (bright red) on `#ffefef` background
|
||||
- **DiagnosticWarn** (virtual text): `#d75f00` (orange) on `#ece0e0` background
|
||||
- **DiagnosticInfo** (virtual text): `#8989af` (blue) on `#e0e0ec` background
|
||||
- **DiagnosticHint** (virtual text): `#89af89` (green) on `#e0ece0` background
|
||||
|
||||
## Testing Checklist
|
||||
|
||||
- [ ] Errors show in red with red undercurl
|
||||
- [ ] Warnings show in orange with orange undercurl
|
||||
- [ ] Hints show in green
|
||||
- [ ] Info messages show in blue
|
||||
- [ ] Virtual text is readable against light background
|
||||
- [ ] Sign column icons show correct colors
|
||||
- [ ] Diagnostic floating windows display correctly
|
||||
|
||||
## Debug Command
|
||||
|
||||
Use the `<leader>hi` keymap to inspect highlight info under cursor and verify diagnostic colors are applied correctly.
|
||||
3
UltiSnips/all.snippets
Normal file
3
UltiSnips/all.snippets
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
snippet tp "{% partial ... " i
|
||||
{% partial '$1'$0 %}
|
||||
endsnippet
|
||||
265
UltiSnips/css.snippets
Normal file
265
UltiSnips/css.snippets
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
snippet abs "pabs position: absolute;"
|
||||
position: absolute;
|
||||
endsnippet
|
||||
snippet fix "position: fixed;"
|
||||
position: fixed;
|
||||
endsnippet
|
||||
snippet rel "position: relative;"
|
||||
position: relative;
|
||||
endsnippet
|
||||
snippet row "flex-direction: row;"
|
||||
flex-direction: row;
|
||||
endsnippet
|
||||
snippet col "flex-direction: column;"
|
||||
flex-direction: column;
|
||||
endsnippet
|
||||
snippet over "overflow: hidden;"
|
||||
overflow: $0;
|
||||
endsnippet
|
||||
|
||||
snippet style "/* stylelint-disable-next-line ... */"
|
||||
/* stylelint-disable-next-line ${1:declaration-block-no-shorthand-property-overrides} */
|
||||
endsnippet
|
||||
|
||||
snippet @m "@media ( ..."
|
||||
@media (${1:min-width}: ${2:$bp-${3:s}-min}) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet @max "@media (max-width: ..."
|
||||
@media (max-width: ${2:$bp-${3:s}-max}) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet @min "@media (min-width: ..."
|
||||
@media (min-width: ${2:$bp-${3:s}-min}) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet lg "linear-gradient( ... )"
|
||||
linear-gradient(
|
||||
${1:to bottom},
|
||||
${2:transparent},
|
||||
${3:transparent}
|
||||
)$0
|
||||
endsnippet
|
||||
|
||||
snippet bglg "background: linear-gradient ..."
|
||||
background-image: linear-gradient(
|
||||
${2:to bottom},
|
||||
${3:transparent},
|
||||
${4:transparent}
|
||||
);
|
||||
endsnippet
|
||||
|
||||
snippet flex "display: flex ..."
|
||||
display: flex;${1:
|
||||
flex-direction: ${2:column};}
|
||||
justify-content: ${3:center};
|
||||
align-items: ${4:center};
|
||||
endsnippet
|
||||
|
||||
snippet w "width: ;"
|
||||
width: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet h "height: ;"
|
||||
height: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet wh "width: ; height: ;"
|
||||
width: ${1:100%};
|
||||
height: $1;
|
||||
endsnippet
|
||||
|
||||
snippet mxw "max-width: ;"
|
||||
max-width: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet mxh "max-height: ;"
|
||||
max-height: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet mnw "min-width: ;"
|
||||
min-width: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet mnh "min-height: ;"
|
||||
min-height: ${1:100%};
|
||||
endsnippet
|
||||
|
||||
snippet bgc "background-color: ;"
|
||||
background-color: ${1:transparent};
|
||||
endsnippet
|
||||
|
||||
snippet t "top: ... ;"
|
||||
top: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet b "bottom: ... ;"
|
||||
bottom: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet l "left: ... ;"
|
||||
left: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet r "right: ... ;"
|
||||
right: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet bd "border: ... ;"
|
||||
border: ${1:1px} ${2:solid} ${3:currentColor};
|
||||
endsnippet
|
||||
|
||||
snippet bdt "border-top: ... ;"
|
||||
border-top: ${1:1px} ${2:solid} ${3:currentColor};
|
||||
endsnippet
|
||||
|
||||
snippet bdb "border-bottom: ... ;"
|
||||
border-bottom: ${1:1px} ${2:solid} ${3:currentColor};
|
||||
endsnippet
|
||||
|
||||
snippet bdl "border-left: ... ;"
|
||||
border-left: ${1:1px} ${2:solid} ${3:currentColor};
|
||||
endsnippet
|
||||
|
||||
snippet bdr "border-right: ... ;"
|
||||
border-right: ${1:1px} ${2:solid} ${3:currentColor};
|
||||
endsnippet
|
||||
|
||||
snippet br "border-radius: ... ;"
|
||||
border-radius: ${1:50%};
|
||||
endsnippet
|
||||
|
||||
snippet m "margin: ... ;"
|
||||
margin: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet mt "margin-top: ... ;"
|
||||
margin-top: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet mb "margin-bottom: ... ;"
|
||||
margin-bottom: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet ml "margin-left: ... ;"
|
||||
margin-left: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet mr "margin-right: ... ;"
|
||||
margin-right: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet p "padding: ... ;"
|
||||
padding: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet pt "padding-top: ... ;"
|
||||
padding-top: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet pb "padding-bottom: ... ;"
|
||||
padding-bottom: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet pl "padding-left: ... ;"
|
||||
padding-left: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet pr "padding-right: ... ;"
|
||||
padding-right: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet fs "font-size: ... ;"
|
||||
font-size: ${1:1}${2:rem};
|
||||
endsnippet
|
||||
|
||||
snippet fw "font-weight: ... ;"
|
||||
font-weight: ${1:bold};
|
||||
endsnippet
|
||||
|
||||
snippet o "opacity: ... ;"
|
||||
opacity: ${1:0};
|
||||
endsnippet
|
||||
|
||||
snippet grid "display: grid ..."
|
||||
display: grid;
|
||||
grid-template-columns: $1;
|
||||
grid-template-rows: $0;
|
||||
endsnippet
|
||||
|
||||
snippet gr "grid-row: ... ;"
|
||||
grid-row: $0;
|
||||
endsnippet
|
||||
|
||||
snippet gc "grid-column: ... ;"
|
||||
grid-column: $0;
|
||||
endsnippet
|
||||
|
||||
snippet rgbw "rgba( ... )"
|
||||
rgba(${1:#fff}, ${2:0.5})
|
||||
endsnippet
|
||||
|
||||
snippet rgbb "rgba( ... )"
|
||||
rgba(${1:#000}, ${2:0.5})
|
||||
endsnippet
|
||||
|
||||
snippet before "::before { ... }"
|
||||
${1:&}::before {
|
||||
content: '$2';
|
||||
display: ${3:block};
|
||||
position: ${4:absolute};
|
||||
width: ${5:100%};
|
||||
height: ${6:100%};
|
||||
${7:top}: ${8:0};
|
||||
${9:left}: ${10:0};
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet after "::after { ... }"
|
||||
${1:&}::after {
|
||||
content: '$2';
|
||||
display: ${3:block};
|
||||
position: ${4:absolute};
|
||||
width: ${5:100%};
|
||||
height: ${6:100%};
|
||||
${7:top}: ${8:0};
|
||||
${9:left}: ${10:0};
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet befaft "::before, ::after { ... }"
|
||||
${1:&}::before {
|
||||
$1::after {
|
||||
content: '$2';
|
||||
display: ${3:block};
|
||||
position: ${4:absolute};
|
||||
width: ${5:100%};
|
||||
height: ${6:100%};
|
||||
${7:top}: ${8:0};
|
||||
${9:left}: ${10:0};
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet bs "box-shadow ...;"
|
||||
box-shadow: ${1:0} ${2:0} $3px $4px ${5:#000} ${6:inset};
|
||||
endsnippet
|
||||
|
||||
snippet pabs "Position: absolute ..."
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
endsnippet
|
||||
|
||||
snippet v "var(--...)"
|
||||
var(--$0)
|
||||
endsnippet
|
||||
|
||||
snippet ftscss "/* vim: set filetype=scss: */"
|
||||
/* vim: set filetype=scss: */
|
||||
endsnippet
|
||||
3
UltiSnips/dosini.snippets
Normal file
3
UltiSnips/dosini.snippets
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
snippet polycolor "${colors.color}"
|
||||
\$\{colors.${1:foreground}}$0
|
||||
endsnippet
|
||||
3
UltiSnips/eruby.snippets
Normal file
3
UltiSnips/eruby.snippets
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
snippet cldef "Colour definition"
|
||||
$1 = ["#$2", $3, "$4"]
|
||||
endsnippet
|
||||
106
UltiSnips/html.snippets
Normal file
106
UltiSnips/html.snippets
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
snippet html5 "HTML% boilerplate."
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />${2:
|
||||
<link rel="stylesheet" href="${3:./assets/css/style.css}">}
|
||||
<title>$1</title>
|
||||
</head>
|
||||
<body>$0 ${4:
|
||||
<script src="${5:./assets/js/index.js}"></script>}
|
||||
</body>
|
||||
</html>
|
||||
endsnippet
|
||||
|
||||
snippet option "<option value=..."
|
||||
<option value="$1">${2:$1}</option>$0
|
||||
endsnippet
|
||||
|
||||
snippet c "class= ... "
|
||||
class="$1"$0
|
||||
endsnippet
|
||||
|
||||
snippet plc "<img src='https://via.placeholder.it ..."
|
||||
<img class="$1" src="https://via.placeholder.com/$2" alt="">
|
||||
endsnippet
|
||||
|
||||
snippet tag "wrap with tag"
|
||||
<$1$0>
|
||||
${VISUAL}
|
||||
</$1>
|
||||
endsnippet
|
||||
|
||||
snippet tagi "wrap with tag inline"
|
||||
<$1$0>${VISUAL}</$1>
|
||||
endsnippet
|
||||
|
||||
snippet ftphp "<!-- vim: set filetype=php -->"
|
||||
<!-- vim: set filetype=php: -->
|
||||
endsnippet
|
||||
|
||||
snippet wp "<!-- wp:... {...}"
|
||||
<!-- wp:$1 ${2:\{"$3":$4\}} -->
|
||||
$0
|
||||
<!-- /wp:$1 -->
|
||||
endsnippet
|
||||
|
||||
snippet wp/ "<!-- wp:... {...}"
|
||||
<!-- wp:$1 ${2:\{"$3":$4\}} /-->$0
|
||||
endsnippet
|
||||
|
||||
snippet wp:spacer "<!-- wp:spacer ..."
|
||||
<!-- wp:spacer {"height":$1} -->
|
||||
<div style="height: $1px" aria-hidden="true" class="wp-block-spacer"></div>
|
||||
<!-- /wp:spacer -->$0
|
||||
endsnippet
|
||||
|
||||
snippet wp:heading "<!-- wp:heading {..."
|
||||
<!-- wp:heading {"className":"$1"} -->
|
||||
<h${2:2} class="$1">$3</h$2>
|
||||
<!-- /wp:heading -->$0
|
||||
endsnippet
|
||||
|
||||
snippet wp:comments "<!-- wp:comments-query-loop"
|
||||
<!-- wp:comments-query-loop -->
|
||||
<div class="wp-block-comments-query-loop">
|
||||
<!-- wp:comment-template -->
|
||||
<!-- wp:columns -->
|
||||
<div class="wp-block-columns"><!-- wp:column \{"width":"40px"\} -->
|
||||
<div class="wp-block-column" style="flex-basis:40px">
|
||||
<!-- wp:avatar \{"size":40,"style":\{"border":\{"radius":"20px"\}\}\} /--></div>
|
||||
<!-- /wp:column -->
|
||||
|
||||
<!-- wp:column -->
|
||||
<div class="wp-block-column">
|
||||
<!-- wp:comment-author-name /-->
|
||||
|
||||
<!-- wp:group \{"style":\{"spacing":\{"margin":\{"top":"0px","bottom":"0px"\}\}\},"layout":\{"type":"flex"\}\} -->
|
||||
<div class="wp-block-group" style="margin-top:0px;margin-bottom:0px">
|
||||
<!-- wp:comment-date /-->
|
||||
<!-- wp:comment-edit-link /-->
|
||||
</div>
|
||||
<!-- /wp:group -->
|
||||
|
||||
<!-- wp:comment-content /-->
|
||||
<!-- wp:comment-reply-link /-->
|
||||
</div>
|
||||
<!-- /wp:column --></div>
|
||||
<!-- /wp:columns -->
|
||||
<!-- /wp:comment-template -->
|
||||
|
||||
<!-- wp:comments-pagination -->
|
||||
<!-- wp:comments-pagination-previous /-->
|
||||
|
||||
<!-- wp:comments-pagination-numbers /-->
|
||||
|
||||
<!-- wp:comments-pagination-next /-->
|
||||
<!-- /wp:comments-pagination -->
|
||||
</div>
|
||||
<!-- /wp:comments-query-loop -->
|
||||
endsnippet
|
||||
|
||||
snippet wp:comment-form "<!-- wp:post-comments-form"
|
||||
<!-- wp:post-comments-form /-->
|
||||
endsnippet
|
||||
183
UltiSnips/javascript.snippets
Normal file
183
UltiSnips/javascript.snippets
Normal file
|
|
@ -0,0 +1,183 @@
|
|||
snippet todo "// TODO"
|
||||
// TODO $0
|
||||
endsnippet
|
||||
|
||||
snippet fn "function .."
|
||||
function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet if "if ( ... ) { ... }"
|
||||
if ($1) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet cl "console.log( ... )"
|
||||
console.log($0);
|
||||
endsnippet
|
||||
|
||||
snippet cw "console.warn( ... )"
|
||||
console.warn($0);
|
||||
endsnippet
|
||||
|
||||
snippet f "for (...)"
|
||||
for (let index=0; index < $1; index += 1) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet fr "for (...)"
|
||||
for (let index=${1:0}; index ${2:<} $3; index ${4:+=} ${5:1}) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet .fe "...forEach( ... );" i
|
||||
.forEach(($1) => {
|
||||
$0
|
||||
});
|
||||
endsnippet
|
||||
|
||||
snippet wae "window.addEventListener( ... );"
|
||||
window.addEventListener('$1', ($2) => {
|
||||
$0
|
||||
});
|
||||
endsnippet
|
||||
|
||||
snippet .ael "...addEventListener( ... );" i
|
||||
.addEventListener('$1', ($2) => {
|
||||
$0
|
||||
});
|
||||
endsnippet
|
||||
|
||||
snippet st "setTimeout( ... )"
|
||||
setTimeout(() => {$0
|
||||
}, ${1:1000});
|
||||
endsnippet
|
||||
|
||||
snippet dq "document.querySelector( ... )"
|
||||
document.querySelector($0)
|
||||
endsnippet
|
||||
|
||||
snippet dqa "document.querySelectorAll( ... )"
|
||||
document.querySelectorAll($0)
|
||||
endsnippet
|
||||
|
||||
snippet cdq "const ... = document.querySelector( ... )"
|
||||
const $1 = document.querySelector($0);
|
||||
endsnippet
|
||||
|
||||
snippet cdqa "const ... = document.querySelectorAll( ... )"
|
||||
const $1 = document.querySelectorAll($0);
|
||||
endsnippet
|
||||
|
||||
snippet jsx "import React ..."
|
||||
import * as React from "react";${1:
|
||||
import { css } from "@emotion/react";}
|
||||
|
||||
const `!p snip.rv = snip.basename` = ($2) => {
|
||||
return (
|
||||
<div>$0
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default `!p snip.rv = snip.basename`;
|
||||
endsnippet
|
||||
|
||||
|
||||
snippet isi "import { StaticImage } ..."
|
||||
import { StaticImage } from "gatsby-plugin-image";
|
||||
endsnippet
|
||||
|
||||
snippet simg "<StaticImage ... />"
|
||||
<StaticImage src="$1" alt="$2" />$0
|
||||
endsnippet
|
||||
|
||||
snippet st. "styled."
|
||||
const $1 = styled.${2:div}\`
|
||||
$0
|
||||
\`;
|
||||
endsnippet
|
||||
|
||||
snippet icss "import ... from ..."
|
||||
import \{ css \} from "@emotion/react";
|
||||
endsnippet
|
||||
|
||||
snippet ccs "const ..Css=css``"
|
||||
const $1Css = css\`
|
||||
$0
|
||||
\`;
|
||||
endsnippet
|
||||
|
||||
snippet cse "css={css``}"
|
||||
css={css\`$0\`}
|
||||
endsnippet
|
||||
|
||||
snippet css "css={..Css}"
|
||||
css={$0Css}
|
||||
endsnippet
|
||||
|
||||
snippet th "this.handle..."
|
||||
this.handle${1:Click} = this.handle$1.bind(this);
|
||||
endsnippet
|
||||
|
||||
snippet tb "this ... = ... .bind(this);"
|
||||
this.$1 = this.$1.bind(this);
|
||||
endsnippet
|
||||
|
||||
snippet wprb
|
||||
import { registerBlockType } from '@wordpress/blocks';
|
||||
|
||||
const blockStyle = {
|
||||
color: red,
|
||||
backgroundColor: pink,
|
||||
};
|
||||
|
||||
registerBlockType( '${1:namespace}/${2:block-name}', {
|
||||
title: '$3',
|
||||
icon: '${4:universal-access-alt}',
|
||||
category: '${5:layout}',
|
||||
example: {},
|
||||
edit( { className } ) {
|
||||
return <div className={ className }>Hello World, step 1 (from the editor).</div>;
|
||||
},
|
||||
save() {
|
||||
return <div style={ blockStyle }>Hello World, step 1 (from the frontend).</div>;
|
||||
},
|
||||
} );
|
||||
endsnippet
|
||||
|
||||
snippet rtw "React + twin.macro"
|
||||
import * as React from "react"
|
||||
import 'twin.macro'
|
||||
|
||||
const `!p snip.rv = snip.basename` = ({ children }) => {
|
||||
return (
|
||||
<$1 tw="$0">
|
||||
{children}
|
||||
</$1>
|
||||
)
|
||||
}
|
||||
|
||||
export default `!p snip.rv = snip.basename`
|
||||
|
||||
endsnippet
|
||||
|
||||
snippet ue "useEffect(() => {"
|
||||
useEffect(() => {
|
||||
$0
|
||||
}, ${1:[]});
|
||||
endsnippet
|
||||
|
||||
snippet ule "useLayoutEffect(() => {"
|
||||
useLayoutEffect(() => {
|
||||
$0
|
||||
}, ${1:[]});
|
||||
endsnippet
|
||||
|
||||
snippet imp "import ... from ..."
|
||||
import $1 from "${2:.}/$1";
|
||||
endsnippet
|
||||
1
UltiSnips/javascriptreact.snippets
Normal file
1
UltiSnips/javascriptreact.snippets
Normal file
|
|
@ -0,0 +1 @@
|
|||
extends css, javascript
|
||||
33
UltiSnips/jinja.snippets
Normal file
33
UltiSnips/jinja.snippets
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
extends html
|
||||
|
||||
snippet com "{# .. #}"
|
||||
{# $0 #}
|
||||
endsnippet
|
||||
|
||||
snippet import "{% import ... %}"
|
||||
{% import "$1" as $2 %}
|
||||
endsnippet
|
||||
|
||||
snippet macro "{% macro ...%}"
|
||||
{% macro $1(${2:$3="$4"}) %}
|
||||
$0
|
||||
{% endmacro %}
|
||||
endsnippet
|
||||
|
||||
snippet blockin "{% block .. %}"
|
||||
{% block $1 %}$0{% endblock %}
|
||||
endsnippet
|
||||
|
||||
snippet block "{% block .. %}"
|
||||
{% block $1 %}
|
||||
$0
|
||||
{% endblock %}
|
||||
endsnippet
|
||||
|
||||
snippet include "{% include .. %}"
|
||||
{% include "$0" %}
|
||||
endsnippet
|
||||
|
||||
snippet extends "{% extends .. %}"
|
||||
{% extends "$0" %}
|
||||
endsnippet
|
||||
19
UltiSnips/jst.snippets
Normal file
19
UltiSnips/jst.snippets
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
snippet req "<%- require( ..."
|
||||
<%- require('!!ejs-compiled-loader?{}!./$1.ejs')($0) %>
|
||||
endsnippet
|
||||
|
||||
snippet % "<% ... %>"
|
||||
<% $0 %>
|
||||
endsnippet
|
||||
|
||||
snippet = "<= ... =>"
|
||||
<%= $0 %>
|
||||
endsnippet
|
||||
|
||||
snippet - "<- ... ->"
|
||||
<%- $0 %>
|
||||
endsnippet
|
||||
|
||||
snippet # "<# ... #>"
|
||||
<%# $0 %>
|
||||
endsnippet
|
||||
83
UltiSnips/markdown.snippets
Normal file
83
UltiSnips/markdown.snippets
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
snippet l "[...](...)"
|
||||
[${1:title}](${2:url})$0
|
||||
endsnippet
|
||||
|
||||
snippet c "``` ..."
|
||||
\`\`\`$0
|
||||
\`\`\`
|
||||
endsnippet
|
||||
|
||||
# latex
|
||||
snippet vec "vector 1x2" i
|
||||
\\begin{bmatrix} $1 \\\\ $2 \\end{bmatrix}$0
|
||||
endsnippet
|
||||
|
||||
snippet vec3 "vector 1x3" i
|
||||
\\begin{bmatrix} $1 \\\\ $2 \\\\ $3 \\end{bmatrix}$0
|
||||
endsnippet
|
||||
|
||||
snippet mx "matrix 2x2" i
|
||||
\\begin{bmatrix} $1 & $2 \\\\ $3 & $4 \\end{bmatrix}$0
|
||||
endsnippet
|
||||
|
||||
snippet mx3 "matrix 3x3" i
|
||||
\\begin{bmatrix} $1 & $2 & $3 \\\\ $4 & $5 & $6 \\\\ $7 & $8 & $9 \\end{bmatrix}$0
|
||||
endsnippet
|
||||
|
||||
snippet lim "limit" i
|
||||
\\lim{$1 \\to $2}$0
|
||||
endsnippet
|
||||
|
||||
snippet sum "sum" i
|
||||
\\sum_{$1}^{$2}$0
|
||||
endsnippet
|
||||
|
||||
snippet fr "fraction" i
|
||||
\\frac{$1}{$2}$0
|
||||
endsnippet
|
||||
|
||||
snippet sq "square root" i
|
||||
\\sqrt{$1}$0
|
||||
endsnippet
|
||||
|
||||
snippet rt "root" i
|
||||
\\sqrt[${1:3}]{${2:x}}$0
|
||||
endsnippet
|
||||
|
||||
snippet br "{}" i
|
||||
\\lbrace $1 \\rbrace$0
|
||||
endsnippet
|
||||
|
||||
snippet | "|...|"
|
||||
\\lvert $1 \\rvert$0
|
||||
endsnippet
|
||||
|
||||
snippet || "|...|"
|
||||
\\lVert $1 \\rVert$0
|
||||
endsnippet
|
||||
|
||||
snippet ds "displaystyle" i
|
||||
\\displaystyle$0
|
||||
endsnippet
|
||||
|
||||
snippet lmb "lambda" i
|
||||
\\lambda$0
|
||||
endsnippet
|
||||
|
||||
snippet imp "implies" i
|
||||
\\Rightarrow
|
||||
endsnippet
|
||||
|
||||
snippet int "integral" i
|
||||
\\int_{$1}^{$2} $0
|
||||
endsnippet
|
||||
|
||||
snippet web "web snippet"
|
||||
[$1]($2)
|
||||
|
||||
\`\`\`
|
||||
$3
|
||||
\`\`\`
|
||||
|
||||
---$0
|
||||
endsnippet
|
||||
3
UltiSnips/octobercms.snippets
Normal file
3
UltiSnips/octobercms.snippets
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
snippet pl "{% partial ... %}"
|
||||
{% partial "$0" %}
|
||||
endsnippet
|
||||
95
UltiSnips/php.snippets
Normal file
95
UltiSnips/php.snippets
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
extends html
|
||||
|
||||
snippet doc "/**"
|
||||
/**
|
||||
* $1
|
||||
*/$0
|
||||
endsnippet
|
||||
|
||||
snippet pre "<pre>print_r()</pre>"
|
||||
echo "<pre>";
|
||||
print_r($0);
|
||||
echo "</pre>";
|
||||
endsnippet
|
||||
|
||||
snippet if "if () {}"
|
||||
if ($1) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet fe "foreach () {}"
|
||||
foreach (\$${1:array} as \$${2:item}) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet pp "<?php ... ?>"
|
||||
<?php $0; ?>
|
||||
endsnippet
|
||||
|
||||
snippet pe "<?php ... ?>"
|
||||
<?php echo "$0"; ?>
|
||||
endsnippet
|
||||
|
||||
snippet ph "<?php ... ?>"
|
||||
<?php esc_html( $0 ); ?>
|
||||
endsnippet
|
||||
|
||||
snippet pf "public function ..."
|
||||
public function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet pt "protected function ..."
|
||||
protected function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet pv "private function ..."
|
||||
private function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet psf "public static function ..."
|
||||
public static function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet prsf "public static function ..."
|
||||
private static function $1($2) {
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet ''= "'...' => "
|
||||
'$1' => $0,
|
||||
endsnippet
|
||||
|
||||
snippet apm "add_post_meta(..."
|
||||
add_post_meta( ${1:2720}, '__DEBUG__$2', $0);
|
||||
endsnippet
|
||||
|
||||
snippet upm "update_post_meta(..."
|
||||
update_post_meta( ${1:2720}, '__DEBUG__$1', $0);
|
||||
endsnippet
|
||||
|
||||
snippet sw "switch ..."
|
||||
switch ($1) {
|
||||
case $2:
|
||||
$3;
|
||||
break;
|
||||
default:
|
||||
$0
|
||||
}
|
||||
endsnippet
|
||||
|
||||
snippet cs "case ..."
|
||||
case $1:
|
||||
$0;
|
||||
break;
|
||||
endsnippet
|
||||
19
UltiSnips/python.snippets
Normal file
19
UltiSnips/python.snippets
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
snippet qxconfig "qutebrowser xResources config"
|
||||
c.colors.messages.$1 = xresources['*${2:background}']$0
|
||||
endsnippet
|
||||
|
||||
snippet main "if __name__ == .."
|
||||
def main():
|
||||
$0
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
endsnippet
|
||||
|
||||
snippet ld "logger.debug()"
|
||||
logger.debug("$1".format($2))
|
||||
endsnippet
|
||||
|
||||
snippet li "logger.info()"
|
||||
logger.info("$1".format($2))
|
||||
endsnippet
|
||||
49
UltiSnips/scss.snippets
Normal file
49
UltiSnips/scss.snippets
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
extends css
|
||||
|
||||
snippet @i "@include"
|
||||
@include $0;
|
||||
endsnippet
|
||||
|
||||
snippet imt "@include margin-t( <top> );"
|
||||
@include margin-t(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet imb "@include margin-b( <bottom> );"
|
||||
@include margin-b(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet imv "@include margin-v( <top>, <bottom> );"
|
||||
@include margin-v($0);
|
||||
endsnippet
|
||||
|
||||
snippet im "@include margin( <top>, <bottom>, <left>, <right> );"
|
||||
@include margin($0);
|
||||
endsnippet
|
||||
|
||||
snippet ipt "@include pad-t( <top> );"
|
||||
@include pad-t(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet ipb "@include pad-b( <bottom> );"
|
||||
@include pad-b(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet iph "@include pad-v( <left>, <right> );"
|
||||
@include pad-h($0);
|
||||
endsnippet
|
||||
|
||||
snippet ipv "@include pad-v( <top>, <bottom> );"
|
||||
@include pad-v($0);
|
||||
endsnippet
|
||||
|
||||
snippet ipl "@include pad-l( <left> );"
|
||||
@include pad-l(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet ipr "@include pad-r( <right> );"
|
||||
@include pad-r(${0:1});
|
||||
endsnippet
|
||||
|
||||
snippet ip "@include pad( <top>, <bottom>, <left>, <right> );"
|
||||
@include pad($0);
|
||||
endsnippet
|
||||
3
UltiSnips/sh.snippets
Normal file
3
UltiSnips/sh.snippets
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
snippet polybashcolor "%{{F{color}}}" i
|
||||
%\{\{F\{color${1:4}}}}
|
||||
endsnippet
|
||||
7
UltiSnips/vim.snippets
Normal file
7
UltiSnips/vim.snippets
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
snippet scolor "SetColor('', .."
|
||||
SetColor('$1', '$2', '$3', '$4', '$5', '$6')$0
|
||||
endsnippet
|
||||
|
||||
snippet cscolor "call SetColor('', .."
|
||||
call SetColor('$1', '$2', '$3', '$4', '$5', '$6')$0
|
||||
endsnippet
|
||||
154
UltiSnips/vue.snippets
Normal file
154
UltiSnips/vue.snippets
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
extends html, javascript, scss
|
||||
|
||||
snippet vue "Default template"
|
||||
<template>
|
||||
$0
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
},
|
||||
|
||||
data () {
|
||||
return {
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
||||
endsnippet
|
||||
|
||||
snippet byinput "Beufy Input Field"
|
||||
<div class="field"> <!-- $1 -->
|
||||
<label class="label">$1</label>
|
||||
<div class="control">
|
||||
<input class="input"
|
||||
name="$2"
|
||||
${3:type="${4:text}"}
|
||||
v-model="${5:$2}">
|
||||
</div>
|
||||
</div>$0
|
||||
endsnippet
|
||||
|
||||
snippet byselect "Buefy Select Field"
|
||||
<div class="field"> <!-- $1 -->
|
||||
<label class="label">$1</label>
|
||||
<div class="control">
|
||||
<div class="select">
|
||||
<select name="$2"
|
||||
:v-model="$2">
|
||||
$0
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
endsnippet
|
||||
|
||||
snippet nt "this.$nextTick( () => { ... })"
|
||||
this.$nextTick( () => {
|
||||
$0
|
||||
})
|
||||
endsnippet
|
||||
|
||||
snippet props "props: { ... }"
|
||||
props: {
|
||||
$1: {
|
||||
type: ${2:Boolean},
|
||||
required: ${3:false},
|
||||
default() {
|
||||
return ${4:false};
|
||||
},
|
||||
},
|
||||
},$0
|
||||
endsnippet
|
||||
|
||||
snippet prop "property: { ... }"
|
||||
$1: {
|
||||
type: ${2:Boolean},
|
||||
required: ${3:false},
|
||||
default() {
|
||||
return ${4:false};
|
||||
},
|
||||
},$0
|
||||
endsnippet
|
||||
|
||||
snippet comps "components { ... }"
|
||||
components: {
|
||||
$0,
|
||||
},
|
||||
endsnippet
|
||||
|
||||
snippet data "data() { return { ... } }"
|
||||
data() {
|
||||
return {
|
||||
$1: $2,$0
|
||||
};
|
||||
},
|
||||
endsnippet
|
||||
|
||||
snippet compd "computed: { ... }"
|
||||
computed: {
|
||||
$1() {
|
||||
$0
|
||||
},
|
||||
},
|
||||
endsnippet
|
||||
|
||||
snippet meth "methods: { ... }"
|
||||
methods: {
|
||||
$1() {
|
||||
$0
|
||||
},
|
||||
},
|
||||
endsnippet
|
||||
|
||||
snippet style "<style ..."
|
||||
<style ${1:lang="${2:scss}"} ${3:scoped}>
|
||||
$0
|
||||
</style>
|
||||
endsnippet
|
||||
|
||||
snippet impc "import ... from '~/components...';"
|
||||
import $1 from '~/components/$1';$0
|
||||
endsnippet
|
||||
|
||||
snippet tran "<transition ..."
|
||||
<transition name="$1">
|
||||
${VISUAL}$0
|
||||
</transition>
|
||||
endsnippet
|
||||
|
||||
snippet .tran "vue transition selector"
|
||||
.$1 {
|
||||
&-enter-active {
|
||||
transition: ${2:opacity} ${3:1}s;
|
||||
}
|
||||
|
||||
&-leave-active {
|
||||
transition: $2 ${4:1}s;
|
||||
}
|
||||
|
||||
&-enter,
|
||||
&-leave-to {
|
||||
$2: ${5:0};
|
||||
}
|
||||
}$0
|
||||
endsnippet
|
||||
|
||||
snippet script "<script> ...</script>"
|
||||
<script>
|
||||
export default {
|
||||
name: '$0',
|
||||
};
|
||||
</script>
|
||||
endsnippet
|
||||
|
||||
snippet s ":style='{ ... }"
|
||||
:style="{ '$1': $2 }"$0
|
||||
endsnippet
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks (including consecutive single-line comments)
|
||||
(comment) @fold
|
||||
|
||||
;; Fold consecutive single-line comments as a block
|
||||
((comment) @fold
|
||||
(#match? @fold "^//"))
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks (including /** */ docblocks)
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
;; extends
|
||||
|
||||
;; Fold comment blocks
|
||||
(comment) @fold
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
-- Paper Tonic Modern
|
||||
-- A paper-like colorscheme for Neovim supporting both light and dark modes
|
||||
-- A light, paper-like colorscheme for Neovim
|
||||
-- Forked from the original Paper Tonic with modern Lua implementation
|
||||
|
||||
-- Reset highlights and syntax
|
||||
|
|
@ -11,10 +11,8 @@ end
|
|||
-- Set colorscheme name
|
||||
vim.g.colors_name = 'paper-tonic-modern'
|
||||
|
||||
-- Set default background if not already set
|
||||
if vim.o.background == '' then
|
||||
vim.o.background = 'light'
|
||||
end
|
||||
-- Set background to light
|
||||
vim.o.background = 'light'
|
||||
|
||||
-- Load the colorscheme
|
||||
require('paper-tonic-modern').load()
|
||||
|
|
|
|||
44
eslint.config.js
Normal file
44
eslint.config.js
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
// ESLint 9+ flat config format (global default)
|
||||
// See: https://eslint.org/docs/latest/use/configure/configuration-files
|
||||
|
||||
export default [
|
||||
{
|
||||
files: ["**/*.js", "**/*.mjs", "**/*.cjs"],
|
||||
languageOptions: {
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
globals: {
|
||||
// Browser globals
|
||||
console: "readonly",
|
||||
window: "readonly",
|
||||
document: "readonly",
|
||||
navigator: "readonly",
|
||||
// Node.js globals
|
||||
process: "readonly",
|
||||
__dirname: "readonly",
|
||||
__filename: "readonly",
|
||||
require: "readonly",
|
||||
module: "readonly",
|
||||
exports: "readonly",
|
||||
global: "readonly",
|
||||
Buffer: "readonly",
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
// Recommended rules
|
||||
"no-undef": "error",
|
||||
"no-unused-vars": "warn",
|
||||
"no-unreachable": "warn",
|
||||
"no-constant-condition": "error",
|
||||
"no-duplicate-case": "error",
|
||||
|
||||
// Best practices
|
||||
"eqeqeq": ["warn", "always"],
|
||||
"no-implicit-globals": "warn",
|
||||
|
||||
// Style (minimal)
|
||||
"semi": ["warn", "always"],
|
||||
"quotes": ["warn", "double", { "avoidEscape": true }],
|
||||
},
|
||||
},
|
||||
];
|
||||
11
init.lua
11
init.lua
|
|
@ -4,7 +4,6 @@ vim.g.maplocalleader = ' '
|
|||
|
||||
-- Load basic settings, keymaps, autocmds (kept minimal for now)
|
||||
require('settings')
|
||||
require('completion')
|
||||
require('netrw-config')
|
||||
require('keymaps')
|
||||
require('autocmds')
|
||||
|
|
@ -13,7 +12,7 @@ require('keymaps_reference')
|
|||
|
||||
-- Bootstrap lazy.nvim
|
||||
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
|
||||
if not vim.uv.fs_stat(lazypath) then
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
'git', 'clone', '--filter=blob:none', '--single-branch',
|
||||
'https://github.com/folke/lazy.nvim.git', lazypath,
|
||||
|
|
@ -26,12 +25,4 @@ require('lazy').setup({
|
|||
spec = {
|
||||
{ import = 'plugins' },
|
||||
},
|
||||
rocks = {
|
||||
enabled = false,
|
||||
},
|
||||
})
|
||||
|
||||
-- Load optional native packages after lazy.nvim has finalized runtimepath.
|
||||
if vim.fn.has('nvim-0.12') == 1 then
|
||||
vim.cmd.packadd('nvim.undotree')
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,23 +1,31 @@
|
|||
{
|
||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||
"conform.nvim": { "branch": "master", "commit": "016802de402556da54c36bd7359b441266b01cdd" },
|
||||
"copilot.lua": { "branch": "master", "commit": "82607bbb8528222a9a28bfcab0aceb3a7fed7e85" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "d4854fa9a94b5c8b37dd209fb4a19e98e764186f" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "f1e186e44d3b7f9ae918008e2c28ce37c6023d2d" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "a338f44149f5673882c32629697d67b0c0547aec" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
|
||||
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "3172f40c16563db871a58f20d205c710ad782311" },
|
||||
"nvim-lint": { "branch": "master", "commit": "f6230a5c06ba59e6059c14637f1dbe29a7978b9b" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "3bccb6fa49a3a75bfb6d92fed63b13a71a85cfaf" },
|
||||
"nvim-surround": { "branch": "main", "commit": "2e93e154de9ff326def6480a4358bfc149d5da2c" },
|
||||
"nvim-treesitter": { "branch": "main", "commit": "a2f694478be07f89c2d03cc17858a8745a400c4b" },
|
||||
"nvim-treesitter-textobjects": { "branch": "main", "commit": "5c7b0263797dfd1bd6202f2b219f3b53a80b2187" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "d7220b55e16ed3c04e88086256def5d282429493" },
|
||||
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
||||
"LuaSnip": { "branch": "master", "commit": "3732756842a2f7e0e76a7b0487e9692072857277" },
|
||||
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
||||
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
|
||||
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
||||
"copilot-cmp": { "branch": "master", "commit": "15fc12af3d0109fa76b60b5cffa1373697e261d1" },
|
||||
"copilot.lua": { "branch": "master", "commit": "efe563802a550b7f1b7743b007987e97cba22718" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "5813e4878748805f1518cee7abb50fd7205a3a48" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "0b9bb925c000ae649ff7e7149c8cd00031f4b539" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
|
||||
"mason.nvim": { "branch": "main", "commit": "57e5a8addb8c71fb063ee4acda466c7cf6ad2800" },
|
||||
"none-ls.nvim": { "branch": "main", "commit": "5abf61927023ea83031753504adb19630ba80eef" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "d97d85e01339f01b842e6ec1502f639b080cb0fc" },
|
||||
"nvim-lint": { "branch": "master", "commit": "ebe535956106c60405b02220246e135910f6853d" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "9c923997123ff9071198ea3b594d4c1931fab169" },
|
||||
"nvim-surround": { "branch": "main", "commit": "fcfa7e02323d57bfacc3a141f8a74498e1522064" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||
"nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
|
||||
"nvim-ufo": { "branch": "main", "commit": "72d54c31079d38d8dfc5456131b1d0fb5c0264b0" },
|
||||
"oil.nvim": { "branch": "master", "commit": "cbcb3f997f6f261c577b943ec94e4ef55108dd95" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
|
||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
|
||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||
"undotree": { "branch": "master", "commit": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f" }
|
||||
}
|
||||
|
|
|
|||
BIN
legacy/.vimtmp/%home%ray%.bin%dmenu_power
Normal file
BIN
legacy/.vimtmp/%home%ray%.bin%dmenu_power
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.bin%dmenu_ssh
Normal file
BIN
legacy/.vimtmp/%home%ray%.bin%dmenu_ssh
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%barrier%barrier.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%barrier%barrier.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%barrier%run_barrier.sh
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%barrier%run_barrier.sh
Normal file
Binary file not shown.
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%conky%conky-full.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%conky%conky-full.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%conky%conky-short.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%conky%conky-short.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%dmenu%dmenurc
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%dmenu%dmenurc
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%dunst%dunstrc
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%dunst%dunstrc
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%feh%keys
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%feh%keys
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%i3-scrot.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%i3-scrot.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%keepmenu%config.ini
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%keepmenu%config.ini
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%kitty%kitty.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%kitty%kitty.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%lf%draw_img.sh
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%lf%draw_img.sh
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%lf%lfrc
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%lf%lfrc
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%lftp%rc
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%lftp%rc
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%mpv%input.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%mpv%input.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%mpv%mpv.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%mpv%mpv.conf
Normal file
Binary file not shown.
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%.git%COMMIT_EDITMSG
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%.git%COMMIT_EDITMSG
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%coc-settings.json
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%coc-settings.json
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.plugins.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.plugins.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.statusline.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.statusline.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.tabline.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.tabline.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%nvim%init.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%profile%.git%COMMIT_EDITMSG
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%profile%.git%COMMIT_EDITMSG
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%profile%aliases.sh
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%profile%aliases.sh
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%profile%profile
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%profile%profile
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%.git%COMMIT_EDITMSG
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%.git%COMMIT_EDITMSG
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%.gitignore
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%.gitignore
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%autoconfig.yml
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%autoconfig.yml
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%colors.py
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%colors.py
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%config.py
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%config.py
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%quickmarks
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%quickmarks
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%test
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%qutebrowser%test
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%tmux%README.md
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%tmux%README.md
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.colours-full.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.colours-full.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.colours.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.colours.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.conf
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%tmux%tmux.conf
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%user-dirs.dirs
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%user-dirs.dirs
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%.git%COMMIT_EDITMSG
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%.git%COMMIT_EDITMSG
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%.netrwhist
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%.netrwhist
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%UltiSnips%html.snippets
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%UltiSnips%html.snippets
Normal file
Binary file not shown.
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%UltiSnips%jinja.snippets
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%UltiSnips%jinja.snippets
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%after%ftplugin%html.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%after%ftplugin%html.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%after%syntax%vue.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%after%syntax%vue.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%colors%monotonous-light.erb
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%colors%monotonous-light.erb
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.nvim.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.nvim.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.shared.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.shared.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%config%plugins.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%help.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%help.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%markdown.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%markdown.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%octobercms.com
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%octobercms.com
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%octobercms.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%octobercms.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%python.vim
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%ftplugin%python.vim
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%vimrc
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%vimrc
Normal file
Binary file not shown.
BIN
legacy/.vimtmp/%home%ray%.config%vim%vimrc.plugins.shared
Normal file
BIN
legacy/.vimtmp/%home%ray%.config%vim%vimrc.plugins.shared
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue