make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/opt/neovim"
sudo make install
sudo ln -s /opt/neovim/bin/nvim /usr/local/bin/nvim
三、分享vim和nvim的配置
vim配置 ~/.vimrc
call plug#begin('~/.vim/plugged')
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'tpope/vim-fugitive'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'jiangmiao/auto-pairs'
Plug 'easymotion/vim-easymotion'
Plug 'tpope/vim-surround'
Plug 'scrooloose/nerdcommenter'
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'skywind3000/vim-terminal-help'
Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }
call plug#end()
let mapleader = ','
syntax on
syntax enable
colorscheme monokai
highlight! link SignColumn LineNr
set t_Co=256
set nocompatible
set hlsearch
set incsearch
set smartcase
set ignorecase
set showmode
set showmatch
set showtabline=2
set number
set relativenumber
set scrolloff=5
set history=500
set ruler
set wrap
set shiftwidth=2
set tabstop=2
set softtabstop=2
set expandtab
set smartindent
set backspace=2
set ff=unix
set nobackup
set noswapfile
set clipboard=unnamed
set laststatus=2
set fenc=utf-8
set mouse=a
set fdm=marker
set signcolumn=yes
set updatetime=300
let NERDTreeChDirMode=1
let NERDTreeShowBookmarks=1
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
let NERDTreeWinSize=25
let g:airline_symbols = {}
let g:airline_symbols.space = "\ua0"
let g:airline_exclude_filename = []
let g:airline_theme='angr'
let g:airline_powerline_fonts=0
let g:bufferline_echo=0
let g:Powerline_symbols='fancy'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#formatter = 'unique_tail'
" ============ coc.nvim ==============>
let g:coc_global_extensions = ['coc-json', 'coc-git', 'coc-sql', 'coc-yaml', 'coc-xml', 'coc-toml', 'coc-webview', 'coc-markdownlint', 'coc-markdown-preview-enhanced', 'coc-go', 'coc-pyright', 'coc-rust-analyzer', 'coc-java']
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
function! ShowDocumentation()
if CocAction('hasProvider', 'hover')
call CocActionAsync('doHover')
else
call feedkeys('K', 'in')
endif
endfunction
" ============== keymaps ===================
nnoremap tt :NERDTreeToggle
nnoremap tf :NERDTreeFind
nnoremap :vertical resize -1
nnoremap :vertical resize +1
nmap gd (coc-definition)
nmap gD (coc-type-definition)
nmap gi (coc-implementation)
nmap gr (coc-references)
nmap rn (coc-rename)
nmap ac (coc-codeaction-cursor)
nmap as (coc-codeaction-source)
nmap qf (coc-fix-current)
inoremap coc#pum#visible() ? coc#pum#next(1) : CheckBackspace() ? "\" : coc#refresh()
inoremap coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"
inoremap coc#pum#visible() ? coc#pum#prev(1) : "\"
nnoremap K :call ShowDocumentation()
nvim配置 ~/.config/nvim/init.lua
local home = os.getenv('HOME')
-- Automatically install lazy.nvim if it does not exist
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({"git","clone","--filter=blob:none","https://github.com/folke/lazy.nvim.git","--branch=stable",lazypath})
end
vim.opt.rtp:prepend(lazypath)
-- set leader space
vim.g.mapleader = ","
vim.g.maplocalleader = ","
-- disable language provider support (lua and vimscript plugins only)
vim.g.loaded_perl_provider = 0
vim.g.loaded_ruby_provider = 0
vim.g.loaded_node_provider = 0
vim.g.loaded_python_provider = 0
vim.g.loaded_python3_provider = 1
-- disable unused stuff
vim.g.loaded = 1
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.loaded_2html_plugin = 1
vim.g.loaded_tutor_mode_plugin = 1
vim.g.loaded_matchit = 1 -- use vim-matchup
vim.g.loaded_matchparen = 1 -- use vim-matchup
vim.g.coc_global_extensions = {
'coc-json', 'coc-git', 'coc-sql', 'coc-yaml', 'coc-xml', 'coc-toml',
'coc-webview', 'coc-markdownlint', 'coc-markdown-preview-enhanced', 'coc-go', 'coc-pyright', 'coc-rust-analyzer'
}
-- basic settings
vim.cmd('filetype plugin on')
vim.cmd('highlight! link SignColumn LineNr')
vim.cmd('colorscheme monokai')
vim.g.completeopt = { "menuone", "noinsert", "noselect" }
vim.opt_global.shortmess:remove("F")
vim.opt.mouse = 'a' -- allow the mouse to be used in Nvim
vim.opt.encoding = "utf-8"
vim.opt.backspace = "indent,eol,start" -- backspace works on every char in insert mode
vim.opt.history = 1000
vim.opt.startofline = true
vim.opt.clipboard = 'unnamedplus'
vim.opt.textwidth = 80
-- wait time
-- opt.timeout = false
vim.opt.timeoutlen = 300
vim.opt.ttimeout = true
vim.opt.ttimeoutlen = 100
-- display
vim.opt.showmatch = true -- show matching brackets
vim.opt.scrolloff = 5 -- always show 3 rows from edge of the screen
vim.opt.synmaxcol = 300 -- stop syntax highlight after x lines for performance
vim.opt.laststatus = 2 -- always show status line
vim.opt.list = false -- do not display white characters
vim.opt.foldenable = false
vim.opt.foldlevel = 4 -- limit folding to 4 levels
vim.opt.foldmethod = 'syntax' -- use language syntax to generate folds
vim.opt.wrap = false --do not wrap lines even if very long
vim.opt.eol = false -- show if there's no eol char
vim.opt.showbreak= '↪' -- character to show when line is broken
vim.opt.termguicolors = true
-- sidebar
vim.opt.number = true -- line number on the left
vim.opt.relativenumber = true -- line relative number
vim.opt.numberwidth = 3 -- always reserve 3 spaces for line number
vim.opt.signcolumn = 'yes' -- keep 1 column for coc.vim check
vim.opt.updatetime = 300
vim.opt.modelines = 0
vim.opt.showcmd = true -- display command in bottom bar
-- search
vim.opt.incsearch = true -- starts searching as soon as typing, without enter needed
vim.opt.ignorecase = true -- ignore letter case when searching
vim.opt.smartcase = true -- case insentive unless capitals used in search
-- backup and undo
vim.opt.backup = true
vim.opt.swapfile = false
vim.opt.backupdir = home .. '/.config/nvim/.backup/'
vim.opt.directory = home .. '/.config/nvim/.swp/'
vim.opt.undodir = home .. '/.config/nvim/.undo/'
vim.opt.undofile = true
vim.opt.undolevels = 1000
vim.opt.undoreload = 10000
-- text format
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.softtabstop = 2
vim.opt.cindent = true
vim.opt.autoindent = true
vim.opt.smartindent = true
vim.opt.expandtab = true -- expand tab to spaces
vim.opt.smarttab = true
require('lazy').setup(
{
{ 'nvim-lua/plenary.nvim' }, -- nvim基础库
{ 'neoclide/coc.nvim', branch = 'release'}, -- 提供ide补全功能
{ 'puremourning/vimspector' }, -- 提供ide调试功能
{ 'j-hui/fidget.nvim', config = function () require('fidget').setup() end }, -- nvim-lsp进度展示
{ 'gelguy/wilder.nvim' }, -- 模糊匹配路径提示
{ 'easymotion/vim-easymotion' }, -- 快速上下文跳转
{ 'chentoast/marks.nvim', config = function () require("marks").setup() end }, -- 标记跳转
{ 'folke/which-key.nvim', config = function() require("which-key").setup() end }, -- 命令提示
{ 'skywind3000/vim-terminal-help' }, -- 终端助手
{ 'goolord/alpha-nvim', config = function () require('alpha').setup(require'alpha.themes.startify'.config) end }, -- 首屏快捷展示
{ 'tpope/vim-surround', dependencies = {'tpope/vim-commentary','tpope/vim-fugitive','tpope/vim-repeat','tpope/vim-rhubarb','tpope/vim-unimpaired','tyru/open-browser.vim','andymass/vim-matchup'}}, -- 小工具
{ 'nvim-lualine/lualine.nvim' }, -- 状态栏
{ 'nvim-tree/nvim-tree.lua', dependencies = { 'akinsho/bufferline.nvim', 'nvim-tree/nvim-web-devicons' }}, -- 侧边栏
{ 'nvim-treesitter/nvim-treesitter', build = function() require('nvim-treesitter.install').update({ with_sync = true }) end},
{ 'nvim-telescope/telescope.nvim', branch = '0.1.x', dependencies = {'nvim-telescope/telescope-fzf-native.nvim','nvim-telescope/telescope-ui-select.nvim'}},
}
)
-----------------------------------------------------------
-- Define keymaps of Neovim and installed plugins.
-----------------------------------------------------------
function remap(mode, rhs, lhs, bufopts, desc)
if bufopts == nil then
bufopts = {}
end
bufopts.desc = desc
vim.keymap.set(mode, rhs, lhs, bufopts)
end
local bufopts = { silent = true, noremap = true }
-- disable search highlighting by pressing enter
remap("n", "ch", ":nohlsearch")
-- tab management
require("which-key").register({ t = { name = "tabs" }}, { prefix = "" })
remap("n", "tt", ":NvimTreeToggle", bufopts, "Tree List")
remap("n", "tf", ":NvimTreeFindFile", bufopts, "Tree Find")
-- window management
remap("n", "", ":vertical resize -1", bufopts, "Minimize window")
remap("n", "", ":vertical resize +1", bufopts, "Maximize window")
-- telescope
require("which-key").register({ f = {name = "find"}}, { prefix = "" })
remap("n", "ff", "Telescope find_files", bufopts, "Find file")
remap("n", "fg", "Telescope live_grep", bufopts, "Grep")
remap("n", "fb", "Telescope buffers", bufopts, "Find buffer")
remap("n", "fm", "Telescope marks", bufopts, "Find mark")
-- Coc
function _G.check_back_space()
local col = vim.fn.col('.') - 1
return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil
end
function _G.show_docs()
local cw = vim.fn.expand('')
if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then
vim.api.nvim_command('h ' .. cw)
elseif vim.api.nvim_eval('coc#rpc#ready()') then
vim.fn.CocActionAsync('doHover')
else
vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw)
end
end
vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}")
local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}
vim.keymap.set("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts)
vim.keymap.set("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts)
vim.keymap.set("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts)
vim.keymap.set("n", "gd", "(coc-definition)", {silent = true})
vim.keymap.set("n", "gD", "(coc-type-definition)", {silent = true})
vim.keymap.set("n", "gi", "(coc-implementation)", {silent = true})
vim.keymap.set("n", "gr", "(coc-references)", {silent = true})
vim.keymap.set("n", "K", 'lua _G.show_docs()', {silent = true})
require("bufferline").setup({
options = {
numbers = "buffer_id",
labels = "both",
mode = "buffer"
}
})
require("nvim-tree").setup({
disable_netrw = true,
hijack_netrw = true,
view = {
adaptive_size = true,
float = {
enable = true,
},
},
actions = {
open_file = {
quit_on_open = true,
}
}
})
require'nvim-treesitter.configs'.setup {
ensure_installed = {"html", "css", "vim", "lua",*", "typescript", "tsx", "java", "python", "markdown"},
highlight = {
enable = true,
additional_vim_regex_highlighting = true
},
matchup = {
enable = true,
},
}
require('telescope').setup({
defaults = {
path_display = {
shorten = {
len = 3, exclude = {1, -1}
},
truncate = true
},
dynamic_preview_title = true,
mappings = {
n = {
[''] = require('telescope.actions').delete_buffer
},
i = {
[''] = require('telescope.actions').delete_buffer
},
},
},
extensions = {
fzf = {
fuzzy = true, -- false will only do exact matching
override_generic_sorter = true, -- override the generic sorter
override_file_sorter = true, -- override the file sorter
case_mode = "smart_case", -- or "ignore_case" or "respect_case"
-- the default case_mode is "smart_case"
},
}
})
require('telescope').load_extension('fzf')
require('telescope').load_extension('ui-select')
require('lualine').setup {
options = {
theme = 'gruvbox'
},
sections = {
lualine_c = { 'filename', 'g:coc_status'}
}
}
local wilder = require('wilder')
wilder.setup({modes = {':', '/', '?'}})
vim.api.nvim_command("silent! UpdateRemotePlugins") -- 需要载入一次py依赖 不然模糊过滤等失效
wilder.set_option('use_python_remote_plugin', 0)
-- 设置source
wilder.set_option('pipeline', {
wilder.branch(
-- 当默认无输入时 展示15条历史记录
{
wilder.check(function (_, x) return vim.fn.empty(x) end),
wilder.history(15)
},
-- 当输入时 展示所有匹配项(模糊匹配)
wilder.cmdline_pipeline({
fuzzy = 1,
fuzzy_filter = wilder.vim_fuzzy_filter()
}),
-- pipeline for search
wilder.search_pipeline()
),
})
-- 设置样式
wilder.set_option('renderer', wilder.popupmenu_renderer(
wilder.popupmenu_border_theme({
-- 设置特定高亮
highlights = {
accent = "WilderAccent",
selected_accent = "WilderSelectedAccent",
},
highlighter = wilder.basic_highlighter(),
left = { ' ', wilder.popupmenu_devicons() }, -- 左侧加入icon
right = { ' ', wilder.popupmenu_scrollbar() }, -- 右侧加入滚动条
border = 'rounded',
max_height = 17 -- 最大高度限制 因为要计算上下 所以17支持最多15个选项
})
))
一、编译vim9
1、先卸载默认的vim8
2、安装编译依赖
3、下载源码
4、编译与安装
二、编译neovim
1、下载源码
2、编译与安装
三、分享vim和nvim的配置
~/.vimrc
~/.config/nvim/init.lua