linux Vim打造python编辑器
1. 安装vim8.2+
- 查看vim版本(我使用的9.0版本):
vim -version -- VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 22 2022 17:34:53) -- Garbage after option argument: "-version" -- More info with: "vim -h"
- 查看是否支持python3,前边没有'+'的重新安装vim
vim打开任意文件输入:version
VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Nov 22 2022 17:34:53)
Included patches: 1-916
Compiled by root@kali
Huge version without GUI. Features included (+) or not (-):
+acl -clientserver +diff +folding +langmap +mouse_dec +num64 +reltime +syntax +title +wildmenu
+arabic -clipboard +digraphs -footer +libcall -mouse_gpm +packages +rightleft +tag_binary -toolbar +windows
+autocmd +cmdline_compl -dnd +fork() +linebreak -mouse_jsbterm +path_extra -ruby -tag_old_static +user_commands +writebackup
+autochdir +cmdline_hist -ebcdic -gettext +lispindent +mouse_netterm -perl +scrollbind -tag_any_white +vartabs -X11
-autoservername +cmdline_info +emacs_tags -hangul_input +listcmds +mouse_sgr +persistent_undo +signs -tcl +vertsplit -xfontset
-balloon_eval +comments +eval +iconv +localmap -mouse_sysmouse +popupwin +smartindent +termguicolors +vim9script -xim
+balloon_eval_term +conceal +ex_extra +insert_expand -lua +mouse_urxvt +postscript -sodium +terminal +viminfo -xpm
-browse +cryptv +extra_search +ipv6 +menu +mouse_xterm +printer -sound +terminfo +virtualedit -xsmp
++builtin_terms +cscope -farsi +job +mksession +multi_byte +profile +spell +termresponse +visual -xterm_clipboard
+byte_offset +cursorbind +file_in_path +jumplist +modify_fname +multi_lang -python +startuptime +textobjects +visualextra -xterm_save
+channel +cursorshape +find_in_path +keymap +mouse -mzscheme +python3 +statusline +textprop +vreplace
+cindent +dialog_con +float +lambda -mouseshape +netbeans_intg +quickfix -sun_workshop +timers +wildignore
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
defaults file: "$VIMRUNTIME/defaults.vim"
fall-back for $VIM: "/usr/local/vim/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lm -ltinfo -lrt -ldl -L/usr/lib/python3.10/config-3.10-x86_64-linux-gnu -lpython3.10 -lcrypt -lpthread -ldl -lutil -lm -lm
- 编译安装vim
解压后进入vim-master执行(./configure --help可查看参数):
1. ./configure --prefix=/usr/local/vim/ --enable-python3interp # 如果这一步出错,需要根据出错原因安装指定库 # make clean --清除之前编译的可执行文件及配置文件 # make distclean --如果make出错时执行,调整后再重新make 2. make && make install 3. ln -s /usr/local/vim/bin/vim /usr/bin/vim
2. node安装
- 下载
将下载的包在/usr/local下解压并创建链接:
ln -s /usr/local/node/bin/node /usr/local/bin # 引入node ln -s /usr/local/node/bin/npm /usr/local/bin # 引入npm
- 查看版本
node --version
- 注意
这里的安装包在解压后需要查看/usr/local/node/bin/下是否为软链接,不是的话需要删掉原来的npm,npx,corepack手动创建软链接:
cd /usr/local/node/bin
rm npm,npx,corepack # 删除原来的三个文件
ln -s ../lib/node_modules/corepack/dist/corepack.js /home/node/bin/corepack
ln -s ../lib/node_modules/npm/bin/npm-cli.js /home/node/bin/npm
ln -s ../lib/node_modules/npm/bin/npx-cli.js /home/node/bin/npx

3. 配置~/.vimrc文件
- 修改.vimrc文件(没有的手动创建),查看文件换行符:set ff?,linux下如果结果是dos,则需要设置成unix,:set ff=unix,本来才用defx作为目录插件,但是发现在一些机器配置过程中会有问题,所以改用coc-explorer.
"-----------------------------------------------"
" 基础设置 "
"-----------------------------------------------"
set modelines=0 " 禁用模式行(安全措施)
syntax on " 语法高亮
filetype on " 开启文件类型检测
set encoding=utf-8 " 编码设置
set number " 显示行号
set relativenumber " 显示相对行号
set smartindent " 智能缩进
set autoindent " 自动对齐
set smarttab
set tabstop=4 " tab缩进
set shiftwidth=4 " 设定自动缩进为4个字符
set expandtab " 用space替代tab的输入
set splitright " 设置左右分割窗口时,新窗口出现在右侧
set splitbelow " 设置水平分割窗口时,新窗口出现在底部
set nobackup " 不需要备份
set noswapfile " 禁止生成临时文件
set autoread " 文件自动检测外部更改
set nocompatible " 去除vi一致性
set ambiwidth=double " 解决中文标点显示的问题
set nowrap " 不自动折行
set mouse=a " 使用鼠标
set mousehide " 输入时隐藏光标
set sm! " 高亮显示匹配括号
set hlsearch " 高亮查找匹配
set cursorline " 高亮显示当前行
set termguicolors " 启用终端真色
set showmatch " 显示匹配
set ruler " 显示标尺,在右下角显示光标位置
set novisualbell " 不要闪烁
set showcmd " 显示输入的命令
" 设置光标样式
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
set completeopt=longest,menu " 自动补全配置让Vim补全菜单行为跟IDE一致
set backspace=indent,eol,start " 允许用退格键删除字符
let g:markdown_fenced_languages =['c', 'cpp', 'python', 'javascript']
set guifont=SimSun-ExtB:h14 " 设置字体和字体大小
" 禁止显示滚动条
set guioptions-=l
set guioptions-=L
set guioptions-=r
set guioptions-=R
" 禁止显示菜单和工具条
set guioptions-=m
set guioptions-=T
"-----------------------------------------------"
" 自定义功能 "
"-----------------------------------------------"
" 格式化json格式--------------------
command! JsonFormat :execute '%!python -m json.tool'
\ | :execute '%!python -c "import re,sys;chr=__builtins__.__dict__.get(\"unichr\", chr);sys.stdout.write(re.sub(r\"\\u[0-9a-f]{4}\", lambda x: chr(int(\"0x\" + x.group(0)[2:], 16)), sys.stdin.read()))"'
\ | :%s/ \+$//ge
\ | :set ft=javascript
\ | :1
map <F4> <Esc>:JsonFormat<CR>
" 快捷键绑定-------------------------
let mapleader='\'
noremap <TAB>w <C-w>w
" 使用方向键切换buffer
noremap <Leader><left> :bp<CR>
noremap <Leader><right> :bn<CR>
" 使用 \ + s 保存
noremap <Leader>s :w<CR>
"-----------------------------------------------"
" 插件安装 "
"-----------------------------------------------"
call plug#begin('~/.vim/plugged')
" if has('nvim')
" Plug 'Shougo/defx.nvim', { 'do': ':UpdateRemotePlugins' }
" else
" Plug 'Shougo/defx.nvim'
" Plug 'roxma/nvim-yarp'
" Plug 'roxma/vim-hug-neovim-rpc'
" endif
Plug 'Yggdroot/indentLine'
Plug 'morhetz/gruvbox'
Plug 'joshdick/onedark.vim'
Plug 'vim-airline/vim-airline'
Plug 'mhinz/vim-startify'
Plug 'ryanoasis/vim-devicons'
" Plug 'kristijanhusak/defx-icons'
Plug 'sbdchd/neoformat'
Plug 'beautify-web/js-beautify'
Plug 'preservim/nerdcommenter'
Plug 'mattn/emmet-vim'
Plug 'skywind3000/asyncrun.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }
call plug#end()
"-----------------------------------------------"
" 插件设置 "
"-----------------------------------------------"
"----------asyncrun-------------
let g:asyncrun_open=10
let g:asyncrun_save=1
noremap <silent> <F5> :call CompileRun()<CR>
func! CompileRun()
exec "w"
if &filetype == 'c'
exec ':AsyncRun -mode=term -pos=hide gcc "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)"'
exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 $(VIM_FILEDIR)/$(VIM_FILENOEXT)"
elseif &filetype == 'cpp'
exec ':AsyncRun -pos=hide g++ -O3 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" -lpthread'
exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 $(VIM_FILEDIR)/$(VIM_FILENOEXT)"
elseif &filetype == 'python'
exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 python3 $(VIM_FILEPATH)"
elseif &filetype == 'html'
exec ":! %"
elseif &filetype == 'go'
exec ":AsyncRun -mode=term -pos=hid go build $(VIM_FILEDIR)/$(VIM_FILENOEXT)"
exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 go run $(VIM_FILEPATH)"
elseif &filetype == 'javascript'
exec ":AsyncRun -mode=term -pos=bottom -rows=10 -focus=0 node $(VIM_FILEPATH)"
endif
endfunc
"----------Startify-------------
noremap <Leader>bh :Startify<CR>
"-----------neoformat-----------
let g:neoformat_try_node_exe = 1
"保存时自动格式化代码
"这个自动命令里面用到的事件是BufWritePre,这个事件会在保存_任何_字符到文件之前触发。
augroup fmt
autocmd!
autocmd BufWritePre * :Neoformat
augroup END
"------------indentLine----------
"解决markdown文件*号隐藏问题
let g:markdown_syntax_conceal=0
let g:vim_json_conceal=0
"---------- set theme ------------
set vb t_vb=
set background=dark
"colorscheme gruvbox
colorscheme onedark
"----------airline------------
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = '>'
let g:airline#extensions#tabline#left_alt_sep = '*'
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#tabline#buffer_nr_show = 1 "显示buffer编号
let g:airline#extensions#tabline#buffer_nr_format = '%s:'
let g:airline#extensions#battery#enabled = 1
let g:airline_left_sep = '>'
let g:airline_left_alt_sep = '*'
let g:airline_theme='onedark'
"let g:airline#extensions#tabline#overflow_marker = '… '
" let airline#extensions#tabline#current_first = 1
"-----------defx----------------
" 使用 F3/<Leader>+f+t 切换显示文件浏览,使用 ;a 查找到当前文件位置
" let g:maplocalleader=';'
" nnoremap <silent> <F3>
" \ :<C-u>Defx -resume -toggle -buffer-name=tab`tabpagenr()`<CR>
"
" nnoremap <silent> <Leader>ft
" \ :<C-u>Defx -resume -toggle -buffer-name=tab`tabpagenr()`<CR>
"
" nnoremap <silent> <LocalLeader>a
" \ :<C-u>Defx -resume -buffer-name=tab`tabpagenr()` -search=`expand('%:p')`<CR>
"
" " 初始化
" call defx#custom#option('_', {'columns': 'indent:git:icons:filename','winwidth': 28,'split': 'vertical','direction': 'topleft','listed': 1,'toggle': 1,'resume': 1,'show_ignored_files': 0,'root_marker': '[in]:'})
"
" call defx#custom#column('indent', {'indent': ' ',})
"
" "快捷键绑定
" autocmd FileType defx call s:defx_my_settings()
" function! s:defx_my_settings() abort
" " Define mappings
" nnoremap <silent><buffer><expr> <CR>
" \ defx#do_action('multi', ['drop'])
" nnoremap <silent><buffer><expr> c
" \ defx#do_action('copy')
" nnoremap <silent><buffer><expr> m
" \ defx#do_action('move')
" nnoremap <silent><buffer><expr> p
" \ defx#do_action('paste')
" nnoremap <silent><buffer><expr> l
" \ defx#is_directory() ?
" \ defx#do_action('open_tree', 'toggle') :
" \ defx#do_action('multi', ['drop'])
" nnoremap <silent><buffer><expr> E
" \ defx#do_action('open', 'vsplit')
" nnoremap <silent><buffer><expr> D
" \ defx#do_action('new_directory')
" nnoremap <silent><buffer><expr> F
" \ defx#do_action('new_file')
" noremap <silent><buffer><expr> r
" \ defx#do_action('rename')
" nnoremap <silent><buffer><expr> d
" \ defx#do_action('remove')
" noremap <silent><buffer><expr> B
" \ defx#is_directory() ?
" \ defx#do_action('cd', ['..']) :
" \ defx#do_action('close_tree')
" nnoremap <silent><buffer><expr> q
" \ defx#do_action('quit')
" nnoremap <silent><buffer><expr> .
" \ defx#do_action('toggle_ignored_files')
" endfunction
nnoremap <F3> <Cmd>CocCommand explorer<CR>
"-----------defx-icons(defaults)---------------
" let g:defx_icons_enable_syntax_highlight = 1
" let g:defx_icons_column_length = 1
" let g:defx_icons_directory_icon = ''
" let g:defx_icons_mark_icon = '*'
" let g:defx_icons_copy_icon = ''
" let g:defx_icons_link_icon = ''
" let g:defx_icons_move_icon = ''
" let g:defx_icons_parent_icon = ''
" let g:defx_icons_default_icon = ''
" let g:defx_icons_directory_symlink_icon = ''
" let g:defx_icons_root_opened_tree_icon = ''
" let g:defx_icons_nested_opened_tree_icon = ''
" let g:defx_icons_nested_closed_tree_icon = ''
"-----------注释-------
"" 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
" 快捷键 :
" <leader>ci
"---------------emmet-vim----------
let g:user_emmet_install_global = 0
autocmd FileType html,css EmmetInstall
let g:user_emmet_leader_key='<C-e>'
"-------------coc-nvim-------------
let g:coc_global_extensions = ['coc-json', 'coc-vimlsp', 'coc-pyright', 'coc-explorer', 'coc-sql']
"----------LeaderF----------------
let g:Lf_HideHelp = 1
" popup mode
let g:Lf_WindowPosition = 'popup'
let g:Lf_PreviewInPopup = 1
" 快捷键绑定
let g:Lf_ShortcutF = "<leader>ff"
let g:Lf_ShortcutB = "<leader>fb"
" 排除搜索的文件夹和文件
let g:Lf_WildIgnore = {'dir': ['.svn','.git','.hg','venv','.vscode','.SpaceVim.d'],'file': ['*.sw?','~$*','*.bak','*.exe','*.o','*.so','*.py[co]']}
- 自动补全html标签可在.vimrc上添加下边配置
" html自动补全
autocmd BufNewFile * setlocal filetype=html
function! InsertHtmlTag()
let pat = '\c<\w\+\s*\(\s\+\w\+\s*=\s*[''#$;,()."a-z0-9]\+\)*\s*>'
normal! a>
let save_cursor = getpos('.')
let result = matchstr(getline(save_cursor[1]), pat)
if (search(pat, 'b', save_cursor[1]))
normal! lyiwf>
normal! a</
normal! p
normal! a>
endif
:call cursor(save_cursor[1], save_cursor[2], save_cursor[3])
endfunction
inoremap > <ESC>:call InsertHtmlTag()<CR>a<CR><Esc>O
- 配置python代码自动折叠
" 根据文件类型自动设置折叠方式 autocmd FileType python setlocal foldmethod=indent
- 安装插件管理工具vim-plug
在root目录下创建.vim文件夹,进入然后再创建autoload文件夹,然后执行(速度慢可直接下载plug.vim放到对应目录下即可):
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- 插件安装
-
- 状态栏美化 vim-airline
- 缩进线插件 indentLine
- 代码格式化插件 neoformat
- 异步运行插件 asyncrun.vim
- 代码补全插件 coc.nvim
- 模糊查找 LeaderF
- 颜色主题 onedark.vim
vim打开任意文件执行:PlugInstall下载相应插件(速度慢直接下载,解压后放在~/.vim/plugged/*)
- 字体设置
:set guifont # 查看当前字体 :set guifont=* # 显示支持的所有字体,可以自己调节字体大小和样式后选择并在vimrc文件中配置
4.icons乱码问题
如果你在配置中使用了特殊的icon但是显示有乱码,linux下可以执行文件,可能等待时间比较长,执行结束后会生成一个install.sh文件,执行此文件即可安装字体.
5.目录操作说明
? 显示帮助 * 选中文件或文件夹 l 打开文件夹或文件 o 关闭文件夹或打开文件夹 e 打开文件或目录 E 多文件显示 t 打开文件或目录并将当前文件夹或文件作为父目录 yp 复制绝对路径到剪切板 yn 复制文件名到剪切板 yy 复制文件 ya 追加复制的文件 p 粘贴文件 y<space> 清除文件复制 dd 剪切文件 da 追加剪切文件 d<space> 清除文件剪切 df 删除文件或目录到回收站 dF 永久删除文件或目录 a 添加新文件 A 添加新目录 r 重名文件或目录 q 退出资源管理器 gf 切换到文件根目录 gb 切换到缓冲器根目录 [[ 转到上一个源 ]] 转到下一个源
za 折叠/展开指定函数或类
zM 全局折叠
zR 全局展开
6.windows下gvim
gvim9.0下载安装好后,将上边plug.vim放在gvim安装目录中的autoload下,插件放在autoload同级目录下的plugs中(没有的新建这个目录),.vimrc改名为_vimrc,放在C:\Users\Administrator\下即可.
7.效果展示


浙公网安备 33010602011771号