[Share Experiences] Deepin v20下编译安装vim9和neovim9,默认的vim和neovim版本太低
Tofloor
default avatar
暗黑程序员
deepin
2023-05-03 17:58
Author

一、编译vim9

1、先卸载默认的vim8

sudo apt purge vim vim-* sudo apt autoremove

2、安装编译依赖

sudo apt install lua5.3 liblua5.3-dev ruby2.5-dev python3-pip cmake gettext

3、下载源码

git clone -b v9.0.1504 https://github.com/vim/vim.git ~/Downloads/vim9

4、编译与安装

./configure --prefix=/opt/vim \ --with-features=huge \ --enable-multibyte \ --enable-rubyinterp=yes \ --enable-python3interp=yes \ --enable-luainterp=yes \ --enable-gui=gtk2 \ --enable-cscope \ --enable-fail-if-missing make -j6 sudo make install sudo ln -s /opt/vim/bin/vim /usr/local/bin/vim

二、编译neovim

1、下载源码

git clone -b v0.9.0 https://github.com/neovim/neovim.git ~/Downloads/neovim9

2、编译与安装

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 <leader>tt :NERDTreeToggle<CR> nnoremap <leader>tf :NERDTreeFind<CR> nnoremap <C-S-Right> :vertical resize -1<CR> nnoremap <C-S-Left> :vertical resize +1<CR> nmap <silent> <leader>gd <Plug>(coc-definition) nmap <silent> <leader>gD <Plug>(coc-type-definition) nmap <silent> <leader>gi <Plug>(coc-implementation) nmap <silent> <leader>gr <Plug>(coc-references) nmap <leader>rn <Plug>(coc-rename) nmap <leader>ac <Plug>(coc-codeaction-cursor) nmap <leader>as <Plug>(coc-codeaction-source) nmap <leader>qf <Plug>(coc-fix-current) inoremap <silent><expr> <TAB> coc#pum#visible() ? coc#pum#next(1) : CheckBackspace() ? "\<Tab>" : coc#refresh() inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" nnoremap <silent> <leader>K :call ShowDocumentation()<CR>
  • 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", "<leader>ch", "<cmd>:nohlsearch<cr><cr>") -- tab management require("which-key").register({ t = { name = "tabs" }}, { prefix = "<leader>" }) remap("n", "<leader>tt", "<cmd>:NvimTreeToggle<cr>", bufopts, "Tree List") remap("n", "<leader>tf", "<cmd>:NvimTreeFindFile<cr>", bufopts, "Tree Find") -- window management remap("n", "<C-S-Right>", "<cmd>:vertical resize -1<cr>", bufopts, "Minimize window") remap("n", "<C-S-Left>", "<cmd>:vertical resize +1<cr>", bufopts, "Maximize window") -- telescope require("which-key").register({ f = {name = "find"}}, { prefix = "<leader>" }) remap("n", "<leader>ff", "<cmd>Telescope find_files<cr>", bufopts, "Find file") remap("n", "<leader>fg", "<cmd>Telescope live_grep<cr>", bufopts, "Grep") remap("n", "<leader>fb", "<cmd>Telescope buffers<cr>", bufopts, "Find buffer") remap("n", "<leader>fm", "<cmd>Telescope marks<cr>", 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('<cword>') 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", "<TAB>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts) vim.keymap.set("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts) vim.keymap.set("i", "<CR>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts) vim.keymap.set("n", "<leader>gd", "<Plug>(coc-definition)", {silent = true}) vim.keymap.set("n", "<leader>gD", "<Plug>(coc-type-definition)", {silent = true}) vim.keymap.set("n", "<leader>gi", "<Plug>(coc-implementation)", {silent = true}) vim.keymap.set("n", "<leader>gr", "<Plug>(coc-references)", {silent = true}) vim.keymap.set("n", "<leader>K", '<CMD>lua _G.show_docs()<CR>', {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", "javascript", "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 = { ['<c-d>'] = require('telescope.actions').delete_buffer }, i = { ['<c-d>'] = 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个选项 }) ))
Reply Favorite View the author
All Replies
广快开饭
deepin
2023-05-03 22:47
#1

感谢分享!

kissing_heart

Reply View the author
W2J
deepin
2023-05-04 09:32
#2

感谢分享。等有空也编译一下

Reply View the author
deepinuser17
deepin
2023-05-04 10:19
#3

顺便问一下, 你是怎么加入代码的?

每次我加代码, 必须在开头和结尾加单引号. 不然, <>里面的字符就凭空消失了.

Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG