Trying a IDE like on Vim after a week to setup Emacs (kind of fail).

This page summarizes the projects mentioned and recommended in the original post on /r/vim

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • asyncomplete-lsp.vim

  • execute pathogen#infect() syntax on set number set incsearch filetype plugin indent on "" System """"" Ale let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " Set this. Airline will handle the rest. let g:airline#extensions#ale#enabled = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' """" Tagbar nmap :TagbarToggle """" AutoComplete " It needs https://github.com/prabirshrestha/asyncomplete-lsp.vim inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() : "\" "" Force refresh imap (asyncomplete_force_refresh) " allow modifying the completeopt variable, or it will " be overridden all the time let g:asyncomplete_auto_completeopt = 0 set completeopt=menuone,noinsert,noselect,preview autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif """" Syntastic " https://github.com/vim-syntastic/syntastic "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 """" LSP if executable('clangd') au User lsp_setup call lsp#register_server({ \ 'name': 'clangd', \ 'cmd': {server_info->['clangd', '-background-index']}, \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'], \ }) endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap gd (lsp-definition) nmap gs (lsp-document-symbol-search) nmap gS (lsp-workspace-symbol-search) nmap gr (lsp-references) nmap gi (lsp-implementation) nmap gt (lsp-type-definition) nmap rn (lsp-rename) nmap [g (lsp-previous-diagnostic) nmap ]g (lsp-next-diagnostic) nmap K (lsp-hover) inoremap lsp#scroll(+4) inoremap lsp#scroll(-4) let g:lsp_format_sync_timeout = 1000 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') " refer to doc to add more commands endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END "" Folding set foldmethod=expr \ foldexpr=lsp#ui#vim#folding#foldexpr() \ foldtext=lsp#ui#vim#folding#foldtext() """" Nerdtree " https://github.com/preservim/nerdtree nnoremap n :NERDTreeFocus nnoremap :NERDTree nnoremap :NERDTreeToggle nnoremap :NERDTreeFind " Start NERDTree and put the cursor back in the other window. autocmd VimEnter * NERDTree | wincmd p " Close the tab if NERDTree is the only window remaining in it. autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif " Design let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' """" NerdCommenter " Create default mappings let g:NERDCreateDefaultMappings = 1 " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 " Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' " Set a language to use its alternate delimiters by default let g:NERDAltDelims_java = 1 " Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 " Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 """" IndentLine "let g:indentLine_setColors = 0 "let g:indentLine_defaultGroup = 'SpecialKey' " Vim let g:indentLine_color_term = 239 " GVim let g:indentLine_color_gui = '#A4E57E' " none X terminal let g:indentLine_color_tty_light = 7 " (default: 4) let g:indentLine_color_dark = 1 " (default: 2) " Background (Vim, GVim) let g:indentLine_bgcolor_term = 202 let g:indentLine_bgcolor_gui = '#FF5F00' let g:indentLine_char_list = ['|', '¦', '┆', '┊'] """" bufexplorer " https://github.com/jlanzarotta/bufexplorer

  • syntastic

    Discontinued Syntax checking hacks for vim

  • execute pathogen#infect() syntax on set number set incsearch filetype plugin indent on "" System """"" Ale let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " Set this. Airline will handle the rest. let g:airline#extensions#ale#enabled = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' """" Tagbar nmap :TagbarToggle """" AutoComplete " It needs https://github.com/prabirshrestha/asyncomplete-lsp.vim inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() : "\" "" Force refresh imap (asyncomplete_force_refresh) " allow modifying the completeopt variable, or it will " be overridden all the time let g:asyncomplete_auto_completeopt = 0 set completeopt=menuone,noinsert,noselect,preview autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif """" Syntastic " https://github.com/vim-syntastic/syntastic "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 """" LSP if executable('clangd') au User lsp_setup call lsp#register_server({ \ 'name': 'clangd', \ 'cmd': {server_info->['clangd', '-background-index']}, \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'], \ }) endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap gd (lsp-definition) nmap gs (lsp-document-symbol-search) nmap gS (lsp-workspace-symbol-search) nmap gr (lsp-references) nmap gi (lsp-implementation) nmap gt (lsp-type-definition) nmap rn (lsp-rename) nmap [g (lsp-previous-diagnostic) nmap ]g (lsp-next-diagnostic) nmap K (lsp-hover) inoremap lsp#scroll(+4) inoremap lsp#scroll(-4) let g:lsp_format_sync_timeout = 1000 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') " refer to doc to add more commands endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END "" Folding set foldmethod=expr \ foldexpr=lsp#ui#vim#folding#foldexpr() \ foldtext=lsp#ui#vim#folding#foldtext() """" Nerdtree " https://github.com/preservim/nerdtree nnoremap n :NERDTreeFocus nnoremap :NERDTree nnoremap :NERDTreeToggle nnoremap :NERDTreeFind " Start NERDTree and put the cursor back in the other window. autocmd VimEnter * NERDTree | wincmd p " Close the tab if NERDTree is the only window remaining in it. autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif " Design let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' """" NerdCommenter " Create default mappings let g:NERDCreateDefaultMappings = 1 " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 " Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' " Set a language to use its alternate delimiters by default let g:NERDAltDelims_java = 1 " Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 " Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 """" IndentLine "let g:indentLine_setColors = 0 "let g:indentLine_defaultGroup = 'SpecialKey' " Vim let g:indentLine_color_term = 239 " GVim let g:indentLine_color_gui = '#A4E57E' " none X terminal let g:indentLine_color_tty_light = 7 " (default: 4) let g:indentLine_color_dark = 1 " (default: 2) " Background (Vim, GVim) let g:indentLine_bgcolor_term = 202 let g:indentLine_bgcolor_gui = '#FF5F00' let g:indentLine_char_list = ['|', '¦', '┆', '┊'] """" bufexplorer " https://github.com/jlanzarotta/bufexplorer

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • nerdtree

    A tree explorer plugin for vim.

  • execute pathogen#infect() syntax on set number set incsearch filetype plugin indent on "" System """"" Ale let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " Set this. Airline will handle the rest. let g:airline#extensions#ale#enabled = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' """" Tagbar nmap :TagbarToggle """" AutoComplete " It needs https://github.com/prabirshrestha/asyncomplete-lsp.vim inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() : "\" "" Force refresh imap (asyncomplete_force_refresh) " allow modifying the completeopt variable, or it will " be overridden all the time let g:asyncomplete_auto_completeopt = 0 set completeopt=menuone,noinsert,noselect,preview autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif """" Syntastic " https://github.com/vim-syntastic/syntastic "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 """" LSP if executable('clangd') au User lsp_setup call lsp#register_server({ \ 'name': 'clangd', \ 'cmd': {server_info->['clangd', '-background-index']}, \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'], \ }) endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap gd (lsp-definition) nmap gs (lsp-document-symbol-search) nmap gS (lsp-workspace-symbol-search) nmap gr (lsp-references) nmap gi (lsp-implementation) nmap gt (lsp-type-definition) nmap rn (lsp-rename) nmap [g (lsp-previous-diagnostic) nmap ]g (lsp-next-diagnostic) nmap K (lsp-hover) inoremap lsp#scroll(+4) inoremap lsp#scroll(-4) let g:lsp_format_sync_timeout = 1000 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') " refer to doc to add more commands endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END "" Folding set foldmethod=expr \ foldexpr=lsp#ui#vim#folding#foldexpr() \ foldtext=lsp#ui#vim#folding#foldtext() """" Nerdtree " https://github.com/preservim/nerdtree nnoremap n :NERDTreeFocus nnoremap :NERDTree nnoremap :NERDTreeToggle nnoremap :NERDTreeFind " Start NERDTree and put the cursor back in the other window. autocmd VimEnter * NERDTree | wincmd p " Close the tab if NERDTree is the only window remaining in it. autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif " Design let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' """" NerdCommenter " Create default mappings let g:NERDCreateDefaultMappings = 1 " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 " Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' " Set a language to use its alternate delimiters by default let g:NERDAltDelims_java = 1 " Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 " Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 """" IndentLine "let g:indentLine_setColors = 0 "let g:indentLine_defaultGroup = 'SpecialKey' " Vim let g:indentLine_color_term = 239 " GVim let g:indentLine_color_gui = '#A4E57E' " none X terminal let g:indentLine_color_tty_light = 7 " (default: 4) let g:indentLine_color_dark = 1 " (default: 2) " Background (Vim, GVim) let g:indentLine_bgcolor_term = 202 let g:indentLine_bgcolor_gui = '#FF5F00' let g:indentLine_char_list = ['|', '¦', '┆', '┊'] """" bufexplorer " https://github.com/jlanzarotta/bufexplorer

  • bufexplorer

    BufExplorer Plugin for Vim

  • execute pathogen#infect() syntax on set number set incsearch filetype plugin indent on "" System """"" Ale let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " Set this. Airline will handle the rest. let g:airline#extensions#ale#enabled = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' """" Tagbar nmap :TagbarToggle """" AutoComplete " It needs https://github.com/prabirshrestha/asyncomplete-lsp.vim inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? asyncomplete#close_popup() : "\" "" Force refresh imap (asyncomplete_force_refresh) " allow modifying the completeopt variable, or it will " be overridden all the time let g:asyncomplete_auto_completeopt = 0 set completeopt=menuone,noinsert,noselect,preview autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif """" Syntastic " https://github.com/vim-syntastic/syntastic "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 """" LSP if executable('clangd') au User lsp_setup call lsp#register_server({ \ 'name': 'clangd', \ 'cmd': {server_info->['clangd', '-background-index']}, \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'], \ }) endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif nmap gd (lsp-definition) nmap gs (lsp-document-symbol-search) nmap gS (lsp-workspace-symbol-search) nmap gr (lsp-references) nmap gi (lsp-implementation) nmap gt (lsp-type-definition) nmap rn (lsp-rename) nmap [g (lsp-previous-diagnostic) nmap ]g (lsp-next-diagnostic) nmap K (lsp-hover) inoremap lsp#scroll(+4) inoremap lsp#scroll(-4) let g:lsp_format_sync_timeout = 1000 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') " refer to doc to add more commands endfunction augroup lsp_install au! " call s:on_lsp_buffer_enabled only for languages that has the server registered. autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END "" Folding set foldmethod=expr \ foldexpr=lsp#ui#vim#folding#foldexpr() \ foldtext=lsp#ui#vim#folding#foldtext() """" Nerdtree " https://github.com/preservim/nerdtree nnoremap n :NERDTreeFocus nnoremap :NERDTree nnoremap :NERDTreeToggle nnoremap :NERDTreeFind " Start NERDTree and put the cursor back in the other window. autocmd VimEnter * NERDTree | wincmd p " Close the tab if NERDTree is the only window remaining in it. autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif " Design let g:NERDTreeDirArrowExpandable = '▸' let g:NERDTreeDirArrowCollapsible = '▾' """" NerdCommenter " Create default mappings let g:NERDCreateDefaultMappings = 1 " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 1 " Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' " Set a language to use its alternate delimiters by default let g:NERDAltDelims_java = 1 " Add your own custom formats or override the defaults let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } } " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 " Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 """" IndentLine "let g:indentLine_setColors = 0 "let g:indentLine_defaultGroup = 'SpecialKey' " Vim let g:indentLine_color_term = 239 " GVim let g:indentLine_color_gui = '#A4E57E' " none X terminal let g:indentLine_color_tty_light = 7 " (default: 4) let g:indentLine_color_dark = 1 " (default: 2) " Background (Vim, GVim) let g:indentLine_bgcolor_term = 202 let g:indentLine_bgcolor_gui = '#FF5F00' let g:indentLine_char_list = ['|', '¦', '┆', '┊'] """" bufexplorer " https://github.com/jlanzarotta/bufexplorer

  • vim-lsp-ale

    Bridge between vim-lsp and ALE

  • Try vim-lsp-ale to get vim-lsp lint errors to show in ale. You should turn off all other linters unless you actually need them.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts