Justin M. Keyes Profile Banner
Justin M. Keyes Profile
Justin M. Keyes

@justinmk

2,776
Followers
56
Following
45
Media
1,039
Statuses

@Neovim maintainer. Vim contributor. "People are afraid to merge." - Less Than Zero

Berlin, Germany
Joined November 2008
Don't wanna be here? Send us removal request.
Pinned Tweet
@justinmk
Justin M. Keyes
25 days
zig : rust engineers : lawyers commits : committees MIT : GNU
5
3
118
@justinmk
Justin M. Keyes
25 days
Neovim artfully avoided the "rewrite it in rust" catfish. We were waiting for Zig (harmonious instead of hostile with C/legacy): To join the zig mafia, use nvim in ghostty developing a bun app.
@mitchellh
Mitchell Hashimoto
25 days
Proud to share that my wife and I have pledged $300,000 to the Zig Software Foundation. Zig has been an absolute joy to use but more importantly I think their culture, vision, and project structure is a bright star for the future of systems programming.
83
251
3K
26
52
1K
@justinmk
Justin M. Keyes
1 year
Neovim is a "batteries included" Lua runtime. The OS vendors failed their job, so we got: * browser = GUI app platform * editor = TUI app platform
Tweet media one
4
19
251
@justinmk
Justin M. Keyes
3 years
goneovim #neovim GUI is looking really good.
Tweet media one
4
40
218
@justinmk
Justin M. Keyes
2 years
working on better #neovim :help docs HTML. Current status (old vs new):
Tweet media one
8
15
138
@justinmk
Justin M. Keyes
25 days
what I call the zig mafia is just my working title for the new generation of "actually suckless sw": harmonious with legacy, yet futuristic (unlike ): utf-8 curl lua nvim rg zig kitty ghostty(?) APE?
5
2
131
@justinmk
Justin M. Keyes
2 months
Neovandalism
Tweet media one
2
13
112
@justinmk
Justin M. Keyes
1 year
you can now search @neovim docs from anywhere on thanks to @algolia Docsearch!
Tweet media one
1
18
106
@justinmk
Justin M. Keyes
3 years
FVim #neovim UI experimenting with variable fonts using Nvim extmarks + UI events. > UI overlay for markdown > hide gui widgets on cursor line
0
20
104
@justinmk
Justin M. Keyes
2 years
this lopsided poll says two things: 1. defaults matter (must be repeated infinitely: so many people still don't understand how much they really matter) 2. nvim-lsp probably is the reason #neovim doubled its user base in two years. credit to @teej_dv @ashkankiani93 mjlbach.
Tweet media one
5
9
89
@justinmk
Justin M. Keyes
1 month
nix is the dev assassin. once you switch to nix, your job is now nix.
8
5
89
@justinmk
Justin M. Keyes
2 years
#neovim and Helix are leading the discussion of editor-agnostic treesitter: injection format, capture names, queries. Pain in the ass. But will allow more treesitter assets to be re-usable across editors. #leverage paging @emacs @zeddotdev @code
4
3
74
@justinmk
Justin M. Keyes
2 years
As long as @Neovim stays fast + maintainable, and the official docs + defaults favor "good taste", doesn't matter what "vscode features" it might flirt with. Don't want spacemacs or a kitchen sink. Do want nice plumbing. Core team is aligned on this.
2
3
69
@justinmk
Justin M. Keyes
7 months
Neovim has 10+ devs whose commits I *know* are high-quality, without even *looking* at the code. How many coworkers are like that... in your entire career? P.S. I still look at the code anyway 😏
1
1
58
@justinmk
Justin M. Keyes
2 years
new #neovim :help docs HTML: Features: - improved styling - nested lists - soft-wrapped "flow" layout on selected pages (example: ) - Lua+treesitter script replaces old AWK script - treesitter parser useful for other apps
Tweet media one
@justinmk
Justin M. Keyes
2 years
#neovim HTML docs beta™ is live at user2/ : Hold off on bug reports for now, >50% will be fixed with: To help with styling:
1
2
22
1
7
49
@justinmk
Justin M. Keyes
2 years
treesitter-based "universal formatter": #neovim will eventually have "universal gw/gq" out of the box. No need for external tools like tidy, python json.tool, etc. This is what you get w/ parsing instead of just "mostly ok" regex highlighting.
0
8
45
@justinmk
Justin M. Keyes
2 years
major milestone for #neovim after 9 years, thanks to @bfredlbfredl and H.L Praveen Raj ( #gsoc 2019 project)
@Neovim
Neovim: vim out of the box
2 years
Nvim is now self-hosting: #neovim UIs are just (inverted) plugins. "nvim" in a terminal starts the TUI, which spawns "nvim --embed" subprocess. Connect TUI to any server! Try this (Nvim 0.9): nvim --listen ./s nvim --remote-ui --server ./s
Tweet media one
14
96
624
3
4
45
@justinmk
Justin M. Keyes
2 years
executing on #neovim plan since 2014: 1. implement core "business logic" in Lua instead of C, 2. thereby gain more core contributors, 3. thereby gain more improvements, 4. goto 1
2
5
43
@justinmk
Justin M. Keyes
5 months
"Neovim decision to use Lua is paying off" > Doom emacs, 29 min to compile > I'm convinced Neovim was the cause for Emacs/Vim to incorporate treesitter LSP async etc. > I'm amazed how easy it is to read help pages & write some Lua to get what you want.
1
3
41
@justinmk
Justin M. Keyes
2 years
nice post: > Neovim ... now more a Lua interpreter in disguise of an editor 😏 > infuriating that colorscheme is script… hard to reason - constraints ok, so why flip themes at runtime? - keep config small. - no "ad hoc" w/ rust. Helix has macros though
1
1
36
@justinmk
Justin M. Keyes
5 years
At #vimconf I was pleased to meet h-michael, @prabirshrestha , @okuramasafumi , @mattn_jp , @mopp , @ujm , wallace, and others. It's a well-run conference that Vim can be proud of.
3
5
33
@justinmk
Justin M. Keyes
5 years
UIs for #neovim are just plugins. So when people say "there are too many UIs", this is like saying "I'm worried that there are too many Vim plugins". Don't worry. #drstrangelove
1
4
28
@justinmk
Justin M. Keyes
6 years
The Nvim 0.4 compositor-based UI is driving important features such as floating windows, detached layouts, and redraw performance. Eye-candy isn't a high priority, but the 'pumblend' feature (~200 LoC) is a fun demo of what's possible. We expected it to ruffle feathers :)
@tpope
Tim Pope
6 years
neovim may have irrevocably fragmented the vim ecosystem, but it also enables pseudo-transparent popup menus, so it;s impossible to say if its bad or not,
11
17
154
0
5
28
@justinmk
Justin M. Keyes
1 year
Nice progress on the "luarocks-tag-release" GitHub Action: LuaRocks is a chance for @neovim to have a real package manager. Fixing its issues is higher-leverage than creating another package manager.
Tweet media one
1
5
25
@justinmk
Justin M. Keyes
4 years
Lots of #neovim devs speaking at this weekend. I'm just eating popcorn this time :)
0
3
24
@justinmk
Justin M. Keyes
5 years
fun to see someone using the dirvish #add_icon_fn () feature of Dirvish (decorates each line with an icon).
2
1
24
@justinmk
Justin M. Keyes
2 years
current status:
Tweet media one
@justinmk
Justin M. Keyes
2 years
working on better #neovim :help docs HTML. Current status (old vs new):
Tweet media one
8
15
138
2
1
24
@justinmk
Justin M. Keyes
5 years
January ? is #neovim anniversary. Someone on /r/vim dug up an early discussion: > I think if people actually start using the fork, it will be hard to ignore it. The "only" thing stopping that is having ready-made builds.
1
3
23
@justinmk
Justin M. Keyes
2 years
#neovim HTML docs beta™ is live at user2/ : Hold off on bug reports for now, >50% will be fixed with: To help with styling:
@justinmk
Justin M. Keyes
2 years
working on better #neovim :help docs HTML. Current status (old vs new):
Tweet media one
8
15
138
1
2
22
@justinmk
Justin M. Keyes
7 years
kitty is the most impressive terminal emulator project I've seen in 15 years. 2x faster than ; advanced features; cross-platform. Maybe people will stop using urxvt and other stagnant garbage.
4
9
22
@justinmk
Justin M. Keyes
3 years
Formatting of documentation, wikis, code comments, bug reports, and other communications is a *functional* feature, *not cosmetic*. Useful content is made more valuable by thoughtful presentation.
0
1
23
@justinmk
Justin M. Keyes
6 years
Vim embraces the "unix philosophy", according to HN platitudes. So I wrote an article explaining how to compose Vim with other shell tools. It's useful for automating text *edits*, as opposed to mere filtering.
0
2
22
@justinmk
Justin M. Keyes
1 year
Every ecosystem keeps re-inventing package managers. Why isn't there a "federated package spec" for "dumb" artifacts? git provides nearly everything needed for an ecosystem-agnostic package manager, except a way to declare dependencies on external repos.
5
2
22
@justinmk
Justin M. Keyes
28 days
minimal Nvim config to highlight current window with a "border": - local 'winhighlight' for WinSeparator/SignColumn - dim CursorLine in non-current windows
Tweet media one
0
1
22
@justinmk
Justin M. Keyes
5 years
prediction: covid-19 will be launchpad for: - a new endless "war on virus" (cf. terrorism/poverty/etc.) - expanded TSA - 10x more plastic/packaging - new liability/blame (being sick in public treated like smoking) - more control, less freedom
7
0
20
@justinmk
Justin M. Keyes
3 years
1
0
20
@justinmk
Justin M. Keyes
5 years
i'll just leave this here...
1
3
18
@justinmk
Justin M. Keyes
2 years
impeccable article on emacs, #neovim etc. > Emacs overfits to the needs and priorities of its maintainers > Forking is incredibly difficult to pull off. ... requires unrelenting, sustained hard work ... you have to be a “special kind of crazy”
0
4
19
@justinmk
Justin M. Keyes
1 month
improved Neovim :checkhealth headings TODO: do this for all :help files before/after:
Tweet media one
1
1
19
@justinmk
Justin M. Keyes
6 months
"redesign remote plugins" side quest: - 300 lines of code (WIP) - will allow deleting 5k lines of code + docs Massively simplifies: 1. "wtf is a remote plugin?" 2. creating a remote plugin 3. maintenance 4. usage (no more :UpdateRemotePlugins)
0
0
19
@justinmk
Justin M. Keyes
2 years
"embed and extend" is the core mantra of #neovim
1
0
17
@justinmk
Justin M. Keyes
5 years
[popular Python lib gets $30k, drama ensues] me: "OSS participants tear each other apart for scraps." drive-by: "$30k is the salary of a Bulgarian dev, you insensitive clod!" me: "Perhaps we should ask why it's newsworthy that a top OSS project raised 1-year Bulgarian salary."
0
0
16
@justinmk
Justin M. Keyes
2 years
Fennel vs Lua: - Fennel is still Lua. Same semantics + useful sugar. - Destructuring, pattern-matching, nil-safe macros, expression-oriented. - Names like pred?, side-eff!, deriv*, |length-of|, from->to, have surprising effect on readability.
2
0
16
@justinmk
Justin M. Keyes
9 months
JetBrains-style Neovim logo
Tweet media one
0
2
16
@justinmk
Justin M. Keyes
16 days
Creating a new vscode/jetbrains extension is like "Call our sales team for pricing". Creating a plugin for vim/emacs is "No email required, you're already using the app".
Tweet media one
1
1
17
@justinmk
Justin M. Keyes
6 years
"set bg=dark" fixes it. Reading ":help 'bg'" makes it pretty clear why almost no one understands what 'bg' does ... thus, dark blue forever.
Tweet media one
1
0
15
@justinmk
Justin M. Keyes
3 years
coq.nvim #neovim completion plugin showing 'pumblend' quasi-transparency (works in TUI). context:
0
1
15
@justinmk
Justin M. Keyes
1 year
Disappointing thing about the modern world: so many people are so sensitive in their expectations, yet so ungenerous in their interpretations.
0
2
14
@justinmk
Justin M. Keyes
3 months
Neovim full circle
Tweet media one
0
0
15
@justinmk
Justin M. Keyes
5 years
Clutter bad, obfuscation also bad, explicit good, DRY also good. Best to let actual use-cases guide you: solve observed pain rather than anticipated pain. Refactoring tools give you that freedom: do non-clever thing first, be clever later if gain is obvious.
0
1
12
@justinmk
Justin M. Keyes
1 month
Exciting benefit of AI: project maintainers can now say to (human) developers, "I don't need you to write code. I need you to have good taste". Humans can finally focus on elegance instead of entropy. Bots take care of mapping POJOs or whatever bullshit you were doing before.
0
0
13
@justinmk
Justin M. Keyes
3 years
maybe this should be the default #neovim theme (minus the yellow)
Tweet media one
1
1
11
@justinmk
Justin M. Keyes
6 years
@MasteringVim Neovim's builtin 'winhighlight' feature can be used to achieve something similar, using the "NormalNC" highlight group. Try this (with multiple windows): :set winhighlight=NormalNC:Comment
1
0
13
@justinmk
Justin M. Keyes
1 year
EU is a tech miasma. So demotivating to know these Vogons are paid full-time to increase bureaucracy & risk of doing *anything at all*. Neovim may not technically fall under this red tape, this time? Who knows. Safety First™
@rikschennink
Rik Schennink
1 year
Reading up on the EU Cyber Resilience Act (CRA). In short it’s an extensive list of requirements and validations for companies and individuals selling software in the EU. A lot of time consuming and costly hoops to jump through. Fines up to 15 million Euros. Oh I forgot. If
17
28
204
1
3
13
@justinmk
Justin M. Keyes
3 years
wicked effects using #neovim extmarks
Tweet media one
0
1
13
@justinmk
Justin M. Keyes
2 years
5-year AI prediction: improved products (cf. comp. vision in Google Photos), no AI overlords. LLMs limited by: 1. copyright shitshow 2. training 3. sources of truth like github/SO LLMs can't generate the sources of truth. Despite hype, LLM = "merely" 10x clippy + search engine.
@bradmillscan
Brad Mills 🔑⚡️
2 years
6/ AI is the evolution of technology & AI tools will accelerate deflationary software & digital trends. AI Agents + UX upgrade of web based OS + censorship-resistant p2p technology + financial recession where customers seek cheaper/free alternatives = disruption of gatekeepers.
0
1
24
3
0
12
@justinmk
Justin M. Keyes
5 years
#neovim user showing how they use jupyter + Neovim-Qt via @bfredlbfredl nvim-ipy plugin:
0
5
12
@justinmk
Justin M. Keyes
1 month
to use Neovim as your kitty scrollback viewer ("pager"), add to kitty.conf: scrollback_pager nvim --clean --cmd 'set eventignore=FileType' +'%s/\e\[[0-9;]*m//g' +'set nomodified readonly' +'$' - todo: Nvim should have a builtin way to colorize ANSI escape codes.
1
2
13
@justinmk
Justin M. Keyes
6 years
"Please" is not needed in error messages, it is 90% noise and 10% annoying. No one will be offended by its absence, nor mollified by its presence. Brevity before levity, density before courtesy, breakfast lunch'n dinna.
0
0
10
@justinmk
Justin M. Keyes
9 months
2-minute terminal programming tutorial: corrections/improvements welcome!
1
2
12
@justinmk
Justin M. Keyes
2 years
@louispilfold @teej_dv - mouse is enabled in #neovim 0.8, as we continue to improve defaults without "two steps backwards". - intro guide will be improved. I'm working on docs *heavily*. - minimal UI is by design, wontfix. - :checkhealth is the entrypoint for everything else, where possible.
1
2
12
@justinmk
Justin M. Keyes
2 years
@chrisheithoff @Neovim - share long-running Nvim server w/ multiple clients - (future) seamlessly share clipboard over ssh/network - (future) improves stability of Nvim
0
0
10
@justinmk
Justin M. Keyes
8 years
Neovim "true color" support now requires "set termguicolors" in your init.vim. NVIM_TUI_ENABLE_TRUE_COLOR is ignored.
0
7
11
@justinmk
Justin M. Keyes
8 months
JavaScript will soon look like Vimscript 😎 let appState = #{ userByVisit: #[], visitsByUser: #{}, };
1
1
11
@justinmk
Justin M. Keyes
3 years
LWN article on @neovim 0.5 features: LWN is the NPR of software. Compliments to the editor(s).
0
2
11
@justinmk
Justin M. Keyes
5 months
vscode-neovim (aka "vscode is a Nvim GUI") continues to mature: - :substitute preview ('inccommand') just works - test story is improving - deleting code, leveraging latest Nvim UI/API
0
2
11
@justinmk
Justin M. Keyes
9 months
"Programming as Theory Building", Peter Naur The mind-map of a complex system can't be written down. Code = compressed form of numerous interactions. Extracting to non-code is so verbose, *consuming* it would take more time than grokking the code.
3
1
11
@justinmk
Justin M. Keyes
5 years
0
3
10
@justinmk
Justin M. Keyes
5 years
FWIW: the "sermon" half of the talk is not "Vim politics", it is "OSS culture", intended to address pervasive low-effort assumptions of how our tools should work. I want to discredit the markov chains emitting faded, meaningless bumper stickers like "Emacs is a great OS...".
@Neovim
Neovim: vim out of the box
5 years
#vimconf keynote by #neovim maintainer @justinmk "We can have nice things". Yes we can :) video: slides:
1
31
95
1
2
11
@justinmk
Justin M. Keyes
2 years
Tweet media one
@justinmk
Justin M. Keyes
2 years
As long as @Neovim stays fast + maintainable, and the official docs + defaults favor "good taste", doesn't matter what "vscode features" it might flirt with. Don't want spacemacs or a kitchen sink. Do want nice plumbing. Core team is aligned on this.
2
3
69
0
1
11
@justinmk
Justin M. Keyes
2 years
btw #emacs doesn't have this. emacsclient is a thin shell that pipes the TUI (rendered on the server) to the local tty. Clients can't decide presentation/handling. Thus TRAMP, X11 forwarding, Xpra.
0
1
9
@justinmk
Justin M. Keyes
6 years
Everyone suffering under the dark blue of Vim's (unix) default colorscheme for the last 20 years has so endured because of a bad default: background=light.
Tweet media one
1
1
9
@justinmk
Justin M. Keyes
1 year
Ultra-successful projects eventually manifest: - Constraints which enable quality + success: ironically maximizes success yet ejects some users. - Implicit, sincere "dare to fork": if carried out, ironically multiplies and perpetuates the success of the project.
1
0
9
@justinmk
Justin M. Keyes
5 years
didn't mean for it to come to this: > Vim could play a sound. Think of a gentle "ping" to indicate the cursor can't move there, or a "tadaa" when a background build finishes ... There are some audio libraries floating around > - Bram Moolenaar
2
0
9
@justinmk
Justin M. Keyes
2 years
Removing obsolete features (entropy) is very similar to "stacktrace snapshot" profiling: deleting noise multiplies the signal.
1
0
9
@justinmk
Justin M. Keyes
25 days
@DoMoreProjects not futuristic. nor even particularly harmonious with legacy. so, everything.
1
0
8
@justinmk
Justin M. Keyes
3 years
my interest in Vim (and Emacs) was always driven by (1) editor improvements and (2) legacy. from that position, vim9script is a vain departure.
0
0
9
@justinmk
Justin M. Keyes
5 years
is now a good time to mention that :smile isn't useful
1
0
9
@justinmk
Justin M. Keyes
5 years
Since everyone likes :smile, I think :gallop, :dance, and :spin would be fun too. Why hasn't anyone requested those?
3
1
9
@justinmk
Justin M. Keyes
3 years
treesitter queries: Vim syntax-syntax: #neovim
0
0
9
@justinmk
Justin M. Keyes
3 years
basecamp 2021 policy: > No more political discussions. No more committees. > We don't have to solve deep social problems. > We make software. Clarity ("we decided X") and accountability ("if you don't like it, blame us and move on") are energizing.
2
2
8
@justinmk
Justin M. Keyes
3 months
very impressed w/ @Roblox . in a few hours, my 13yo son and I created a maze game w/ scripted (Lua ❤️) events, sound effects, teleport effect ... runs on all devices + multiplayer automatically. in contrast, Unity was full of bugs + terrible UX + performance.
@justinmk
Justin M. Keyes
3 months
Neovim full circle
Tweet media one
0
0
15
0
0
8
@justinmk
Justin M. Keyes
5 years
taxophilia: a priori obsession with type systems. Example: "If static typing is important, why the fuck are you using {java,c#,c++,...} instead of Idris? Taxophiles..."
1
0
8
@justinmk
Justin M. Keyes
6 years
Eh, gets its own wikipedia page but Neovim is a footnote on the Vim page. Ok :)
0
1
8
@justinmk
Justin M. Keyes
1 month
> Programmers frequently turn to the joy of open source exactly because it exists outside the normal employment dynamics of quid-pro-quo. That's the relief. Surprising but true. Developing @neovim is an alluring palliative for the agony of my "day job".
0
0
8
@justinmk
Justin M. Keyes
3 years
LuaJit micro-benchmarks: prettaaay, prettaaay, pretty good. #neovim
0
0
8
@justinmk
Justin M. Keyes
11 months
Asymmetric advantage of open source vs enterprise: trivial to "exit" counter-productive coworkers.
1
1
8
@justinmk
Justin M. Keyes
8 months
> Specify the problem *independently* of the solution ... can be a surprisingly difficult and enlightening task. It has ... led me to discover that a "correct" algorithm did not really accomplish what I wanted. — Leslie Lamport
1
0
8
@justinmk
Justin M. Keyes
11 months
It just works. Portable HHGTTG, <10 GB. $ ./wizardcoder.llamafile -p $'```lua\nlocal function nvimBufText(bufnr)\n' -r $'```\n' local function nvimBufText(bufnr) local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) return table.concat(lines, "\n") end
@JustineTunney
Justine Tunney
11 months
I wrote a blog post "Bash One-Liners for LLMs" which explains how to use yesterday's llamafile v0.3 release to analyze image files and URLs in your shell scripts.
13
87
451
0
0
7
@justinmk
Justin M. Keyes
19 days
Any startup gets a 2x strength bonus vs megacorps, by not constantly twiddling with telemetry.
@justinmk
Justin M. Keyes
2 years
"Data driven" usually means CYA. Where's your empirical evidence (data!) of ROI on your telemetry apparatus vs spending that (cognitive, etc.) budget on actual dev work? For non-mature product, it's a distraction. data science ~ agile consulting 2.0
2
1
6
0
0
7
@justinmk
Justin M. Keyes
2 years
I've been using vscode-neovim for 2+ years IRL. No idea why anyone still uses VSCodeVim.
1
0
7
@justinmk
Justin M. Keyes
2 years
1
0
6