Skip to main content

Emacs to Neovim

My move from Emacs to LunarVim

The context

I have been using Emacs for about 20 years. I have been using it as my main editor. I have used it for writing code and writing blog posts.

I especially love the rectangle feature, that I extensively used for commenting text up to reformat data

On the other hand, despite all the good it is told about org-mode and magit, I never really used them.

The extremum of my love for Emacs was when language servers landed in (I dont remember the year), but I could then have decent code completion.

The trigger

In 2023, arrived (in my life!) Github Copilot. I was amazed by the power of the tool. I am still.

When looked at the Github repository of the Copilot team, I saw that NeoVim was part of the supported editors, with the "copilot.vim" plugin.

I was curious to see how it works: I installed NeoVim and the plugin.

The solution

After about one month of trial, I made my decision: I switch to Neovim.

But when I practized Neovim, I heard about LunarVim and tried it: immediate adoption.

The few things I had to tune were:

  • The installation of Github Copilot
  • The setting of Alt+Enter to accept the suggestion of Copilot
  • The setting to use a light theme
  • The setting to have a more visible cursor
This is the code for that:
 lvim.plugins = {
  { "catppuccin/nvim", name = "catppuccin", priority = 1000 },
  { "github/copilot.vim",
    config = function()
      vim.keymap.set('i', '', 'copilot#Accept("\\")', {
          expr = true,
          replace_keycodes = false
        })
      vim.g.copilot_no_tab_map = true
    end,
  },
}

lvim.colorscheme = "catppuccin-latte"
lvim.builtin.bufferline.active = false

vim.api.nvim_command("au VimEnter,WinEnter,BufWinEnter * setlocal cursorline")
vim.api.nvim_command("au VimEnter,WinEnter,BufWinEnter * setlocal cursorcolumn")

-- In NeoVim, the  mapping is for something I dont know. I need to unmap it.
vim.api.nvim_del_keymap("i", "")

-- Enable intelephense
-- Make sure "gd" is mapped to "vim.lsp.buf.definition()" and "gr" is mapped to "vim.lsp.buf.references()"
require'lspconfig'.intelephense.setup{
  cmd = { "intelephense", "--stdio" },
  on_attach = function(client, bufnr)
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "lua vim.lsp.buf.definition()", { noremap = true, silent = true })
    vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "lua vim.lsp.buf.references()", { noremap = true, silent = true })
  end
}
      

Popular posts from this blog

npm run build base-href

Using NPM to specify base-href When building an Angular application, people usually use "ng" and pass arguments to that invocation. Typically, when wanting to hard code "base-href" in "index.html", one will issue: ng build --base-href='https://ngx.rktmb.org/foo' I used to build my angular apps through Bamboo or Jenkins and they have a "npm" plugin. I got the habit to build the application with "npm run build" before deploying it. But the development team once asked me to set the "--base-href='https://ngx.rktmb.org/foo'" parameter. npm run build --base-href='https://ngx.rktmb.org/foo did not set the base href in indext.html After looking for a while, I found https://github.com/angular/angular-cli/issues/13560 where it says: You need to use −− to pass arguments to npm scripts. This did the job! The command to issue is then: npm run build -- --base-href='https://ngx.rktmb.org/foo&

Emacs Pulumi LSP

Install Pulumi Emacs Mode The source code is on https://github.com/pulumi/pulumi-lsp. At the very bottom of the page are the instructions on how to install. You Need to have make installed. $ make install emacs-client mkdir -p ./bin go build -ldflags "-X github.com/pulumi/pulumi-lsp/sdk/version.Version=v0.2.3-6-gec49054" -o ./bin -p 10 ./cmd/... go: downloading github.com/pulumi/pulumi/sdk/v3 v3.53.1 ... ... ... go install -ldflags "-X github.com/pulumi/pulumi-lsp/sdk/version.Version=v0.2.3-6-gec49054" ./cmd/... mkdir -p editors/emacs/bin cd editors/emacs && emacs -Q --batch --eval "(progn (setq package-user-dir \"$(pwd)/bin\" \ package-archives '((\"melpa\" . \"https://melpa.org/packages/\") \

emacs29 intelephense

Emacs 29 and PHP Intelephense I use to use Emacs and PHP Intelephense for PHP development. I recently upgraded to Emacs 29 and PHP Intelephense stopped working. I found a solution on Reddit Based on that, I rewrote my .emacs file to use eglot instead of lsp-mode, and this is the result. (use-package eglot :ensure t) (add-hook 'php-mode-hook 'eglot-ensure) (use-package php-mode :ensure t :mode ("\\.php\\'" . php-mode)) (add-to-list 'auto-mode-alist '("\\.php$" . php-mode)) (provide 'lang-php) (use-package company :ensure t :config (setq company-idle-delay 0.3) (global-company-mode 1) (global-set-key (kbd "M- ") 'company-complete)) (require 'eglot) (add-to-list 'eglot-server-programs '((php-mode :language-id "php") . ("intelephense" "--stdio" :initializationOptions (:licenseKey "98989898989898989898"