|
| 1 | +--- |
| 2 | +layout: newsletter |
| 3 | +title: "Newsletter #11 - **AWESOME TITLE HERE** |
| 4 | +category: newsletter |
| 5 | +permalink: /news/2020/09/ |
| 6 | +--- |
| 7 | +
|
| 8 | +Newsletter notes |
| 9 | +
|
| 10 | +## Something something Covid |
| 11 | +
|
| 12 | +## [0.5 Milestones](https://github.com/neovim/neovim/milestone/19) |
| 13 | +
|
| 14 | +## LSP & Tree-sitter - Maximizing Vim's potential/The future of text editing |
| 15 | +
|
| 16 | +- lightweight |
| 17 | +- tight integration |
| 18 | +
|
| 19 | +## What is LSP |
| 20 | +
|
| 21 | +[Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) is an open, JSON-RPC-based protocol for use between source code editors or integrated development environments (IDEs) and servers that provide programming language-specific features. |
| 22 | +The goal of the protocol is to allow programming language support to be implemented and distributed independently of any given editor or IDE. |
| 23 | +
|
| 24 | +[Language specific implementations and feature support](https://langserver.org/) |
| 25 | +
|
| 26 | +- (auto)completion |
| 27 | +- code actions (automatic formatting, organize imports, ...) |
| 28 | +- go to definition |
| 29 | +- show method signatures |
| 30 | +- show/go to references |
| 31 | +- snippets |
| 32 | +
|
| 33 | +## What is Tree Sitter |
| 34 | +
|
| 35 | +"A really awesome parser" |
| 36 | +"Tree sitter offers a way to navigate ASTs" |
| 37 | +"tree-sitter queries are the new snippets"? |
| 38 | +Error recovery |
| 39 | +"power of vim editing == textobjects" and "tree-sitter == smarter textobjects" |
| 40 | + |
| 41 | +A presentation from the author on what Tree-sitter is and how it came to be: |
| 42 | +[Tree-sitter - A new parsing system for programming tools - Max Brunsfield](https://www.youtube.com/watch?v=Jes3bD6P0To&feature=youtu.be&t=232) |
| 43 | + |
| 44 | +@norcalli - "every file you edit (which has a treesitter grammar definition available) will have the semantic information of what you're working on available to use for anything you want. It's like a core intelligence was added to neovim which was fundamentally missing before." |
| 45 | +@norcalli - "Syntax highlighting is just a consequence of finally being able to understand the program you're working on. There are many, many, many other consequences which are possible, and those text objects are ones for which I'm also super excited." |
| 46 | + |
| 47 | +### Semantic Highlighting |
| 48 | + |
| 49 | +Performance difference between syntax highlighting from a language server and syntax highlighting from TreeSitter |
| 50 | + |
| 51 | +### TreeSitter "replacing plugin functionality" |
| 52 | + |
| 53 | +[context.vim](https://github.com/wellle/context.vim) -> |
| 54 | +[vim-expand-region](https://github.com/terryma/vim-expand-region) -> |
| 55 | + |
| 56 | +## Lua! Lua! Lua! |
| 57 | + |
| 58 | + |
| 59 | + |
| 60 | +Some excerpts from Justin M Keyes ["We can have nice things"](https://www.youtube.com/watch?v=Bt-vmPC_-Ho) presentation at Vim Conf 2019 |
| 61 | +``` |
| 62 | +Worse is better |
| 63 | +
|
| 64 | +Vim's missing 50%: |
| 65 | +- Imperfect design => bad perf; macros, long lines, syntax |
| 66 | +- Vimscript is slow: n AST, ad-hoc impl |
| 67 | +- :vimgrep is slow, :syntax is slow |
| 68 | +- Legacy arch: 600+ globals, high coupling, TUI assumption |
| 69 | +- Inconsistent UI behaviour: win_getid() vs getwininfo() |
| 70 | +``` |
| 71 | + |
| 72 | +### Lua stdlib |
| 73 | + |
| 74 | +"Lua is designed for embedding" |
| 75 | +"Lua is fast, LuaJit is *ridiculously* fast" |
| 76 | +"Less is more: Lua language is super small, simple, _complete_(frozen)" |
| 77 | + |
| 78 | +### Extensibility: Nvim is the "stdlib" |
| 79 | + |
| 80 | + |
| 81 | +``` |
| 82 | +Standard modules: |
| 83 | +- inspect |
| 84 | +- treesitter |
| 85 | +- loop |
| 86 | +- ... trivial to add more(mention luarocks/nvimrocks/plenary) |
| 87 | +``` |
| 88 | + |
| 89 | +### Core features being implemented in Lua |
| 90 | + |
| 91 | +- [neovim-lspconfig](https://github.com/neovim/nvim-lspconfig) - Collection of common configurations for the Nvim LSP client. |
| 92 | +- [completion-nvim](https://github.com/nvim-lua/completion-nvim) - An auto completion framework that aims to provide a better completion experience with neovim's built-in LSP. |
| 93 | +- [diagnostic-nvim](https://github.com/nvim-lua/diagnostic-nvim) - A wrapper for the default LSP diagnostics aimed to make for a more user friendly setup. |
| 94 | +- [lsp-status.nvim](https://github.com/nvim-lua/lsp-status.nvim) - A Neovim plugin/library for generating statusline components from the built-in LSP client. |
| 95 | + |
| 96 | +### Vimscript vs Lua |
| 97 | + |
| 98 | +```vim |
| 99 | +foo.vim |
| 100 | + let s:sum = 0 |
| 101 | + for i in range(1, 9999999) " Parsed 10M times. |
| 102 | + let s:sum = s:sum + i " Parsed 10M times. |
| 103 | + endfor " Parsed 10M times. |
| 104 | + call append('$', s:sum) |
| 105 | +``` |
| 106 | + |
| 107 | +`ex_docmd.c:do_cmdline():` |
| 108 | + |
| 109 | +- copies command (script line), sends to ex_docmd.c:do_one_cmd() |
| 110 | +- ex_docmd.c:do_one_cmd() recursively parses the line |
| 111 | +- ...everytime, for all lines in a Vimscript loop (for/while) |
| 112 | + |
| 113 | +mention [Vim9 script](https://vimhelp.org/vim9.txt.html), the issues it addresses and any statements made by Neovim regarding compatibility. |
| 114 | + |
| 115 | +### A Lua based configuration |
| 116 | + |
| 117 | +[vimpeccable](https://github.com/svermeulen/vimpeccable) aims to supplement the Neovim Lua API with commands to easily map keys. |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +### Extensibility: Fennel (Lisp) and MoonScript |
| 122 | + |
| 123 | +- [Fennel(Lisp)](https://fennel-lang.org) |
| 124 | + - try [fennel-nvim](https://github.com/jaawerth/fennel-nvim) to auto-execute `init.fnl` |
| 125 | +- [MoonScript](https://github.com/leafo/moonscript) |
| 126 | + - [nvim-moonmaker](https://github.com/svermeulen/nvim-moonmaker) Moonscript to compiled Lua |
| 127 | +- [Aniseed](https://github.com/Olical/aniseed) bridges the gap between Fennel and Neovim. Allowing you to easily write plugins or configuration in a Clojure-like Lisp with great runtime performance. |
| 128 | + |
| 129 | +## [Vim Conf](https://www.vimconf.live) |
| 130 | + |
| 131 | +Covid preamble - online conf. |
| 132 | + |
| 133 | +[Vim Conf YouTube channel](https://www.youtube.com/channel/UCPK_UHtbfcWABCi0F0GPG6w) |
| 134 | + |
| 135 | +### Neovim related presentations |
| 136 | + |
| 137 | +| | | | |
| 138 | +|---|---|---| |
| 139 | +| [Conversational Software Development](https://www.youtube.com/watch?v=RU28xy9JXxs) | Oliver Caldwell | |
| 140 | +| [From User to Contributer](https://www.youtube.com/watch?v=EReNOGuMBmo) | Thomas Vigouoroux | |
| 141 | +| [Neovim Builtin LSP](https://www.youtube.com/watch?v=C9X5VF9ASac) | TJ DeVries | |
| 142 | +| [Neovim 0.5 work](https://www.youtube.com/watch?v=FxDBdbuvcU8) | Björn Linse | |
| 143 | +| [What can't you do in Neovim?](https://www.youtube.com/watch?v=78WrSwEKNuM) | Ashkan Kiani | |
| 144 | +| [Why is Lua a good fit for Neovim?](https://www.youtube.com/watch?v=IP3J56sKtn0) | TJ DeVries | |
| 145 | + |
| 146 | +## GSoC 2019 - decoupled UI |
| 147 | + |
| 148 | +[TUI (Terminal UI) remote attachment](https://github.com/neovim/neovim/pull/10071) |
| 149 | +[Multiprocessing Feature](https://github.com/neovim/neovim/pull/9943) |
| 150 | + |
| 151 | +## GSoC 2020 |
| 152 | + |
| 153 | +[Project Proposals](https://github.com/neovim/neovim/wiki/GSoC-2020-Ideas) |
| 154 | + |
| 155 | +[fswatch autoread](https://github.com/neovim/neovim/pull/12593) |
| 156 | +[inccommand: plugin support: cmnd_can_preview for user commands](https://github.com/neovim/neovim/pull/11985) |
| 157 | +[logging API](https://github.com/neovim/neovim/pull/7062) |
| 158 | + |
| 159 | +## UI's |
| 160 | + |
| 161 | +[FireNvim](https://github.com/glacambre/firenvim) |
| 162 | +[FVim](https://github.com/yatli/fvim) |
| 163 | +[GNvim](https://github.com/vhakulinen/gnvim) |
| 164 | +[Neovide](https://github.com/Kethku/neovide) |
| 165 | +[VV](https://github.com/vv-vim/vv) |
| 166 | + |
| 167 | +## Interesting Plugins - an emphasis on the LuaWorld |
| 168 | + |
| 169 | +### NVIM Dev tools - (which are the most useful?) |
| 170 | + |
| 171 | +- [Plenary](https://github.com/nvim-lua/plenary.nvim) Mention luarocks integration |
| 172 | +- [Packer](https://github.com/wbthomason/packer.nvim) |
| 173 | +- [nlua](https://github.com/tjdevries/nlua.nvim) |
| 174 | +- [nvim.lua](norcalli/nvim.lua) |
| 175 | +- [nvim-luadev](https://github.com/bfredl/nvim-luadev) |
| 176 | + |
| 177 | +- The nvim-lua family |
| 178 | + - Plenary/ popup.nvim, things that might become part of core |
| 179 | +- TreeSitter: Rethinking regex : Expand region comparison and ideas for future plugins |
| 180 | + - speak about what could be replaced, word-motion? fancy markdown stuff, vim-exchange |
| 181 | +- Architext |
| 182 | +- Snippets.nvim / Vsnip |
| 183 | +- Packer - an ambitious new package manager |
| 184 | +- Colorizer |
| 185 | +- Formatter |
| 186 | + |
| 187 | +## Python2 deprecation? |
| 188 | + |
| 189 | +## Changes related to UI |
| 190 | + - mouse focus on window |
| 191 | + - ext_popupmenu: completion menu |
| 192 | + - ext_tabline: tab line |
| 193 | + - ext_cmndline: command line |
| 194 | + - ext_hlstate: highlight state |
| 195 | + - ext_messages: messages |
| 196 | + - ext_multigrid: windows, grids |
| 197 | + - remote TUI (GSoC 2019) |
| 198 | + |
| 199 | +## Notable commits/merges |
| 200 | +libuv / libvrwem ? |
| 201 | +### Highlight yanked region |
| 202 | +### LuaHL |
| 203 | +## LibGit2 |
| 204 | + |
| 205 | +nvim__screenshot? |
| 206 | + |
| 207 | +## PR's to watch |
| 208 | + |
| 209 | +buf_set_text ? what will it enable? |
| 210 | +### #12249 https://github.com/neovim/neovim/pull/12249 nvim_buf_set_text |
| 211 | + |
| 212 | +### #12870 https://github.com/neovim/neovim/pull/12870 Color themes per window/line |
| 213 | +### #12823 https://github.com/neovim/neovim/pull/12823 Doc ; Lua concepts |
| 214 | +### #12593 https://github.com/neovim/neovim/pull/12593 fswatrch autoread |
| 215 | + |
| 216 | +### missing functionality for Lua developers |
| 217 | + |
| 218 | +### #12378 https://github.com/neovim/neovim/pull/12378 [WIP] lua: Add autocmd with Lua callback natively #12378 |
| 219 | + |
| 220 | +## Merrged (needs more thorough review of PR's from 0.4 -> 0.5) |
| 221 | + |
| 222 | +### New Decorations API #12816 - `nvim_buf_get_extmark` / `nvim_buf_set_extmark` |
| 223 | +### https://github.com/neovim/neovim/pull/12549 Lua: highlight.on_yank #12549 |
| 224 | +### https://github.com/neovim/neovim/pull/12536/files Execute lua callback on keystroke #12536 |
| 225 | + |
| 226 | + |
| 227 | +### Community efforts - notable blogposts and twitch/youtube content |
| 228 | + |
| 229 | +[##](posts/##.md) Github Sponsors - [12959](https://github.com/neovim/neovim/pull/12249) |
| 230 | + |
| 231 | +- [GitHub will match all contributions (up to $5k)](https://github.blog/2019-05-23-announcing-github-sponsors-a-new-way-to-contribute-to-open-source/) within a developers first year. |
| 232 | +- [BountySource charges fees](https://www.bountysource.com/fees), [GitHub only charges for payment processing](https://github.blog/2019-05-23-announcing-github-sponsors-a-new-way-to-contribute-to-open-source/). |
| 233 | +- [BountySource began introducing worrying changes to their Terms of Service agreement.](https://diziet.dreamwidth.org/5938.html) |
| 234 | + |
0 commit comments