版本 更新日期 简介
v1.1 2022.09.03 ctags和gtags等
v1.0 2022.08.26 第一个版本

此篇文档主要环境为:Window下使用Vmware Station搭建的Ubuntu虚拟机,然后使用vim编辑器在Linux环境下配置一套基础的开发调试环境。

1. 背景

最近开始转向Linux下嵌入式软件开发,为此想要整理一份自己开发中整体环境的搭建,从零开始,为类似需求的人提供一些帮助。

2. Windows下安装vmware station 15

使用vmware station虚拟机软件,使用版本为15,安装过程不再赘述,基本都是一直下一步,密钥需要自己找一下,我是使用的正版的密钥。然后有一些注意的点,或许大家会遇到,下面整理一下。

2.1 环境冲突问题

vmware跟Windows的虚拟环境是冲突的,意思大概是使用wsl2就不能使用vmware,不然就会vmware闪退,需要关闭相关服务,据说,最新版vmware已经解决了冲突问题,大家按需使用如下过程
Windows左下角->【设置】
image.png
然后选择【应用】
image.png
右侧,【相关设置】下有个【程序和功能】选择打开
image.png
左侧有个【启动或关闭Windows功能】选择打开,会弹出一个小框,把【Hyper-V】、【适用于Linux的Window子系统】和【虚拟机平台】取消勾选,然后等待,提示重启电脑生效

2.2 wmware tools安装问题

一般情况下,在wmware tools里添加虚拟机的时候,会自动安装wmware tools,此工具主要用来Windows和里面的虚拟环境交互,比如复制粘贴文件,文本等情况,但实际情况可能会没有安装成功,或者发现没有生效,可以选择重新安装,手动安装步骤可以看这里:https://blog.csdn.net/williamcsj/article/details/121019391

3. 安装ubuntu虚拟机环境

这里我选择的是ubuntu 20.04版本,大家可以按需选择更新或更旧的版本

3.1 下载镜像

不要使用官网去下载镜像,速度很慢,可以选择国内的大厂镜像源,比如阿里云,中科大云,清华云等,这里我选择是中科大源:http://mirrors.ustc.edu.cn/ubuntu-releases/releases/20.04/

3.2 安装过程

打开vmware,选择新建虚拟机,第一次安装,打开主界面就有,有其他环境的,可以选择左上角【文件】-【新建虚拟机】image.png
选择【自定义】,然后下一步
image.png
第二个界面,非常重要,要选择向下兼容一下,偏低一些最好,不要使用最新的,这里选择12.x,不然可能会报错:**发生错误,导致虚拟cpu进入关闭状态**弹窗错误,后面都是常规选择
image.png
image.png
上面按需选择,看看自己的Linux属于哪个发行版,本人是安装Ubuntu,下面位置可以自己定义,尽量不要c盘,会占用比较大内存
image.png
image.png
上面处理器配置,不要两个数乘积不要超过电脑配置,一般2*2够用
image.png
运行内存,尽量为电脑配置的一般为宜,如果多个虚拟机环境,就稍微小一些,后面几步,默认选择即可
image.png
image.png
image.png
image.png
下图中磁盘大小,看看上面位置的硬盘有多大,一般先分配个40G,基本够用,我选择把虚拟磁盘存储为单个文件
image.png
跳过一步的截图,前面选择的稍后选择操作系统,下面要配置下载的镜像的位置了
image.png
选择【新CD/DVD】-【使用ISO映像文件】,选择刚刚下载的镜像位置,然后点完成即可,步骤结束
image.png
后面打开虚拟机,进入到Ubuntu系统的安装过程,没有特殊配置,选择最小安装即可,后续需要什么再手动安装,这样能够锻炼到自己

3.3 Ubuntu桌面自适应问题

安装好可能会出现Ubuntu桌面分辨率很奇怪,各种拉伸等等,首先前面所提到的vmware tools安装好,然后虚拟机关机,vmware菜单栏选择【虚拟机】-【设置】-【显示屏】,按照如图所示,取消勾选拉伸模式,保存重启即可
image.png
上篇在vmware下安装好了Ubuntu 20.04版本的Linux环境,下面要基于Ubuntu环境做一些基础配置

4. Linux环境优化

对基础的Linux环境进行优化,方便使用

4.1 换源

项目地址:https://github.com/SuperManito/LinuxMirrors

4.1.1 已适配的 GNU/Linux 发行版

Debian 8.0 ~ 11.2
Ubuntu 16.04 ~ 21.10
Kali Linux 2.0 ~ 2021.4
Red Hat Enterprise Linux 7.0 ~ 8.5
CentOS 7.0 ~ 8.5
Fedora 28 ~ 35

4.1.2 脚本当前使用的开源镜像站

镜像站名称 镜像站地址 IPv6 Kali Linux Fedora EPEL
1 阿里云 mirrors.aliyun.com
2 腾讯云 mirrors.cloud.tencent.com
3 华为云 mirrors.huaweicloud.com
4 网易 mirrors.163.com
5 搜狐 mirrors.sohu.com
6 清华大学 mirrors.tuna.tsinghua.edu.cn
7 浙江大学 mirrors.zju.edu.cn
8 南京大学 mirrors.nju.edu.cn
9 重庆大学 mirrors.cqu.edu.cn
10 兰州大学 mirror.lzu.edu.cn
11 上海交通大学 mirror.sjtu.edu.cn
12 哈尔滨工业大学 mirrors.hit.edu.cn
13 中国科学技术大学 mirrors.ustc.edu.cn

所有镜像站均支持 Debian Ubuntu CentOS 软件源,建议优先选择由企业提供的软件源
如果使用过程中脚本不能正常输出中文内容则可对照此列表使用,顺序与脚本一致

4.1.3 如何使用

  1. wget https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh
  2. sudo bash ChangeMirrors.sh
  3. 然后按照指示操作即可

4.2. 更新软件包

Linux版本发行后,后续还是会继续更新维护的,刚安装好系统正适合更新一下环境

  1. sudo apt update -y
  2. sudo apt upgrade -y

4.3 更换默认shell为Fish Shell

因为大部分情况下,Linux都是命令行操作,记录很多位置和命令本身就比较麻烦,Fish这个shell包,可以进行命令的补全和提示,推荐替换到默认的shell,安装过程非常简单

  1. sudo apt install fish -y

4.3.1 使用Fish shell

  1. fish # 直接输入fish,即可进入到fish环境,默认会有个提示语,后面可以设置关闭掉
  2. exit # 退出fish shell

4.3.2 基础配置

拷贝一份默认的配置文件,进行修改,首先把进入fish的提示语关掉

  1. cp /usr/share/fish/config.fish ~/.config/fish # 复制一份默认配置文件
  2. vim ~/.config/fish/config.fish # 打开配置文件
  3. set -g -x fish_greeting '' # 最底部添加此句,即可关闭问候语

4.3.3 设置Fish shell为默认shell

  1. chsh -s /usr/bin/fish # 设置fish为默认shell
  2. chsh -s /usr/bin/bash # 重新设置为系统自带默认bash

设置后,需要重新登录,才能生效

4.3.4 常用命令

大部分情况和Linux shell使用方式一样,以下一些常用的技巧:
fish会记录输入过的命令,下次输入时,会灰色提示要不要补全,可以使用Ctrl+F补全,可以使用方向键>接受补全,输入连接号-然后使用TAB键,会列出参数建议,第二次TAB会列出所有建议,第三次TAB,切换到交互模式,可以使用方向键去选择参数

4.4 Samba共享服务

由于虚拟机是安装在Windows环境的,为了方便和Windows文件交互,或者在Windows下开发(可选),可以使用Samba服务共享一部分文件夹到Windows下,关于 Samba

4.4.1 安装Samba

  1. sudo apt-get install samba samba-common

4.4.2 创建共享文件夹

创建一个共享文件夹,也可以直接使用linux里已存在的文件夹

  1. mkdir /home/waldein/projects # waldein是用户名
  2. sudo chmod 777 /home/waldein/projects

4.4.3 添加共享的用户名和密码

  1. sudo smbpasswd -a waldein # 使用自己的linux用户账号即可

4.4.4 配置文件

此项为最重要的,可能会有细微差别,多查资料,应该能够配置成功

  1. sudo vi /etc/samba/smb.conf # vim打开配置文件

定位到文件末尾,然后添加如下配置

  1. [share]
  2. comment = share folder
  3. browseable = yes
  4. path = /home/waldein/projects
  5. create mask = 0700
  6. directory mask = 0700
  7. valid users = waldein
  8. force user = waldein
  9. force group = waldein
  10. public = yes
  11. available = yes
  12. writable = yes

4.4.5 重启服务,加载配置

  1. sudo service smbd restart
  2. ifconfig #查看ip地址,用于windows共享

此时,Windows下win+R,打开cmd,输入\\ip,输入刚刚设置的用户名密码,即可进入共享文件夹projects,以上

5. C/C++基础环境安装

5.1 编译调试环境

  1. sudo apt update
  2. sudo apt install gcc g++ # 安装编译器
  3. sudo apt intall gdb # 安装调试器
  4. sudo apt install make cmake # 安装项目构建工具

5.2 编辑器环境(辅助环境)

主要使用vim编辑器以及配套插件,默认的版本为vim7.x,需要升级,后续插件要求版本高一些

5.2.1 更新vim到版本8

  1. sudo add-apt-repository ppa:jonathonf/vim
  2. sudo apt update
  3. sudo apt install vim

5.2.2 安装python3

Ubuntu默认内置的是Python2,需要安装个Python3环境,可能会用到,以下命令会安装源里最新的版本,如果后续有需要更新的,请找其他途径更新

  1. sudo apt-get install python3

5.2.3 安装adb

工作中实际是使用adb调试设备的,具体可根据需求选择安装

  1. sudo apt-get install adb

5.2.4 安装git

两个用途,一个用来实际的版本管理,另一个就是用来下载一些包

  1. sudo apt-get install git

6. vim插件配置全记录

工欲善其事,必先利其器,首先说明现在linux下的开发方式,可以使用samba映射到windows下,使用其他工具,比如vscode进行开发,本人目前选择是配置vim进行开发,关于vim简单内容不再赘述。

6.1 安装vim-plug

vim-plug是vim插件的管理工具,异步安装,不会导致vim卡顿,下面是安装过程
在本用户的目录下,创建.vim文件夹,进入创建autoload和plugged文件夹,主要命令如下

  1. mkdir .vim
  2. cd .vim/
  3. mkdir autoload plugged
  4. curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim # 安装命令

安装好vim-plug后,使用此工具下载,所需插件,在vim配置文件里添加要下载的插件,示例如下:

  1. call plug#begin('~/.vim/plugged')
  2. Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }
  3. Plug 'tpope/vim-commentary'
  4. Plug 'honza/vim-snippets'
  5. Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
  6. Plug 'vim-airline/vim-airline'
  7. Plug 'neoclide/coc.nvim'
  8. Plug 'luochen1990/rainbow'
  9. Plug 'vim-airline/vim-airline-themes'
  10. Plug 'vim-autoformat/vim-autoformat'
  11. Plug 'tomasr/molokai'
  12. Plug 'mhinz/vim-signify', { 'branch': 'legacy' }
  13. Plug 'ludovicchabant/vim-gutentags'
  14. Plug 'skywind3000/gutentags_plus'
  15. call plug#end()

插件格式如上所示:在call plug#begin和#end里写入要下载的插件,然后命令行模式下:PlugInstall,即可等待下载,不过github一般的访问速度都不好,看自己实际情况多试几次即可

6.2 索引篇

静态索引使用的ctags和gtags,主要功能就是函数跳转,查找定义等功能,使用插件vim-gutentags和gutentags_plus自动管理索引文件

6.2.1 安装ctags

不要再使用老旧的 Exuberant Ctags,多年以前已经维护,请使用最新的 Universal CTags ,它在 Exuberant Ctags 的基础上继续更新迭代了近十年,如今任然活跃的维护着,功能更强大,语言支持更多。
官网推荐源码编译安装

  1. # 安装之前把依赖包安装了,很多可能环境里都有,可以再安装一次
  2. sudo apt install \
  3. gcc make \
  4. pkg-config autoconf automake \
  5. python3-docutils \
  6. libseccomp-dev \
  7. libjansson-dev \
  8. libyaml-dev \
  9. libxml2-dev
  10. # 官方里的安装过程
  11. git clone https://github.com/universal-ctags/ctags.git
  12. cd ctags
  13. ./autogen.sh
  14. ./configure --prefix=/where/you/want # defaults to /usr/local
  15. make
  16. make install # may require extra privileges depending on where to install
  17. # 查看版本
  18. ctags --version
  19. Universal Ctags 5.9.0(6009dc56), Copyright (C) 2015-2022 Universal Ctags Team
  20. Universal Ctags is derived from Exuberant Ctags.
  21. Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  22. Compiled: Aug 28 2022, 15:53:44
  23. URL: https://ctags.io/

6.2.2 安装gtags

gtags全称gnu global,目前版本更新到6.6版本,官方推荐使用编译安装,由于我已经更换了ubuntu的源,直接使用管理器安装,也是最新版,所以使用命令安装即可,源码安装包地址 点击

  1. sudo apt-get install global

6.2.3 vim-gutentags和gutentags_plus

vim-gutentags是用来自动生成和更新ctags和gtags的管理插件,避免每次更新代码,都要手动更新索引库的繁琐步骤,gutentags_plus是官方推荐的补充插件,可以使用gtags-cscope定义成cscope的方式使用,而且解决了一些bug,非常推荐,安装过程使用vim-plug管理器添加即可

  1. Plug 'ludovicchabant/vim-gutentags'
  2. Plug 'skywind3000/gutentags_plus'

具体配置在.vimrc里,可供借鉴(里面使用到了Alt键,linux需要映射此键才能使用)

  1. let g:gutentags_define_advanced_commands = 1
  2. " gutentags 搜索工程目录的标志,当前文件路径向上递归直到碰到这些文件/目录名
  3. let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']
  4. let g:gutentags_add_default_project_roots = 0
  5. " 所生成的数据文件的名称
  6. let g:gutentags_ctags_tagfile = '.tags'
  7. " 同时开启 ctags 和 gtags 支持:
  8. let g:gutentags_modules = []
  9. if executable('ctags')
  10. let g:gutentags_modules += ['ctags']
  11. endif
  12. if executable('gtags-cscope') && executable('gtags')
  13. let g:gutentags_modules += ['gtags_cscope']
  14. endif
  15. " 将自动生成的 ctags/gtags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
  16. let g:gutentags_cache_dir = expand('~/.cache/tags')
  17. " 配置 ctags 的参数,老的 Exuberant-ctags 不能有 --extra=+q,注意
  18. let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extras=+q']
  19. let g:gutentags_ctags_extra_args += ['--c-kinds=+px']
  20. " 如果使用 universal ctags 需要增加下面一行,老的 Exuberant-ctags 不能加下一行
  21. let g:gutentags_ctags_extra_args += ['--output-format=e-ctags']
  22. " 禁用 gutentags 自动加载 gtags 数据库的行为
  23. let g:gutentags_auto_add_gtags_cscope = 0
  24. let g:gutentags_plus_nomap = 1
  25. " A-s 查找符号
  26. " A-g 查找这个定义
  27. " A-c 查找调用这个函数的函数们
  28. " A-t 查找这个字符串
  29. " A-e 查找这个egrep匹配模式
  30. " A-f 查找这个文件
  31. " A-d 查找被这个函数调用的函数们
  32. " A-i #including光标下的文件名查找文件
  33. " A-a 查找分配了当前符号的位置
  34. " A-z 在 ctags 数据库中查找当前单词
  35. noremap <silent> <A-s> :GscopeFind s <C-R><C-W><cr>
  36. noremap <silent> <A-g> :GscopeFind g <C-R><C-W><cr>
  37. noremap <silent> <A-c> :GscopeFind c <C-R><C-W><cr>
  38. noremap <silent> <A-t> :GscopeFind t <C-R><C-W><cr>
  39. noremap <silent> <A-e> :GscopeFind e <C-R><C-W><cr>
  40. noremap <silent> <A-f> :GscopeFind f <C-R>=expand("<cfile>")<cr><cr>
  41. noremap <silent> <A-i> :GscopeFind i <C-R>=expand("<cfile>")<cr><cr>
  42. noremap <silent> <A-d> :GscopeFind d <C-R><C-W><cr>
  43. noremap <silent> <A-a> :GscopeFind a <C-R><C-W><cr>
  44. noremap <silent> <A-z> :GscopeFind z <C-R><C-W><cr>
  45. nmap <A-.> :cw 20<CR>
  46. nmap <A-/> :cclose<CR>

6.3 代码补全篇

vim自动的补全方案,不利于快速开发,可以搭建一个类似jetbrains的强大补全系统,而且一个编辑器可以适配多种语言,这个是其他编辑器做不到的,目前的基本方案是基于LSP+Snippets方案

6.3.1 coc.nvim

基于nodejs运行,本身也是个插件管理器,主要用来配合代码块和LS来实现代码补全和代码提示功能,大大提高编码速度,安装此插件要求vim版本大于8和nodejs版本大于12为宜,所以首先要升级或安装这两个包
用这个主要后面可以慢慢把一系列的插件都转移到这个拓展上来

升级vim
  1. sudo add-apt-repository ppa:jonathonf/vim
  2. sudo apt-get update
  3. sudo apt-get install vim

安装nodejs

ubuntu默认的nodejs版本很低,不符合使用要求,所以使用以下方法安装

  1. apt-get install nodejs-legacy
  2. apt-get install npm
  3. # 安装n模块
  4. npm install -g n
  5. # 升级nodejs到最新stable版本
  6. n stable
  7. # 升级最新npm
  8. npm install npm@latest -g

实际安装过程中,可能遇到各种包依赖问题,多点耐心,网上基本上都能解决,以下记录实际发生的情况,这种情况较多
**[coc.nvim] build/index.js not found, please install dependencies and compile coc.nvim by: yarn install**安装coc之后,打开vim就会提示这个问题,根据这句提示首先安装yarn,然后进入到coc的安装目录下进行install和build,测试成功

  1. sudo npm install -g yarn # 这个能够安装的前提是前面的nodejs和npm已经安装好
  2. # ~/.vim/plugged/coc.nvim/是我的coc.nvim插件的安装目录
  3. cd ~/.vim/plugged/coc.nvim/
  4. yarn install
  5. yarn build

6.3.2 coc-clangd

本次配置主要配置是c/c++开发,所以选择的clangd LS进行提供代码补全,使用coc进行安装插件的方法简单示例,在vim环境的命令行下:CocInstall coc-clangd安装其他插件亦如此,其他具体配置,请自行研究
coc-clangd是基于clangd的,所以要在Ubuntu下安装clangd

  1. sudo apt-get install clangd

遇到一种情况,就是打开c文件,clangd会根据c语言的官方格式,进行扫描,提示各种错误,但是实际开发中,这个不需要,关闭提示需要在.vimrc文件中配置

  1. autocmd FileType c let b:coc_diagnostic_disable=1
  2. let g:coc_disable_startup_warning = 1 # 关闭打开vim的coc提示

配置使用tab键,进行接受补全,ctrl+tab可以切换提示的代码选项

  1. inoremap <silent><expr> <TAB>
  2. \ coc#pum#visible() ? coc#pum#next(1):
  3. \ CheckBackspace() ? "\<Tab>" :
  4. \ coc#refresh()
  5. inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
  6. inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
  7. \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

6.3.3 coc-snippets

前面提到过,使用coc-snippets配合vim-snippets,可以提供常用代码段的快捷生成,比如if整个代码结构

  1. # 输入if,会生成如下
  2. ifelements){
  3. elements
  4. }

配置使用tab键进行,参数跳转,tab键跳到下一个参数,ctrl+z跳到上一个参数(insert模式下)

  1. " Use <leader>x for convert visual selected code to snippet
  2. xmap <leader>x <Plug>(coc-convert-snippet)
  3. inoremap <silent><expr> <TAB>
  4. \ coc#pum#visible() ? coc#_select_confirm() :
  5. \ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
  6. \ CheckBackSpace() ? "\<TAB>" :
  7. \ coc#refresh()
  8. function! CheckBackSpace() abort
  9. let col = col('.') - 1
  10. return !col || getline('.')[col - 1] =~# '\s'
  11. endfunction
  12. let g:coc_snippet_next = '<tab>'
  13. let g:coc_snippet_prev = '<c-z>'

6.3.4 vim-snippets

一个多种语言的基础代码块模板库,本身不提供补全,配合其他插件使用,上面的coc-snippets

6.4 配色篇

vim也可以根据自己的需求选择配色方案,以下是自己用的一些插件

6.4.1 vim-airline和vim-airline-themes

vim状态栏美化,比如buffer的状态,vim状态等等,我使用了默认配置

6.4.2 rainbow

彩虹括号插件,方便看出来括号的配对

6.4.3 molokai

vim整体配色方案

6.4.4 vim-commentary

快速注释插件,无需多余配置

  • gcc 注释一行或者取消注释
  • gcap 注释一个段落(以空行分割)/也可以取消注释一段

目前配色篇用到的特殊配置,没有提及到的基本上都是用的默认配置

  1. " colorscheme setting
  2. colorscheme molokai
  3. let g:molokai_original = 1
  4. " rainbow setting
  5. let g:rainbow_active = 1

6.5 其他篇

目前不知道分类到哪里,先放在这里

6.5.1 LeaderF

此插件一替多,可以记录最近打开的文件,进行切换,搜索行,打开函数列表,搜索文件索引,搜索tag等,以下是关于LeaderF插件相关配置

  1. let g:Lf_ShortcutF = '<c-p>'
  2. let g:Lf_ShortcutB = '<m-n>'
  3. noremap <c-n> :LeaderfMru<cr>
  4. noremap <A-f> :LeaderfFunction!<cr>
  5. noremap <A-b> :LeaderfBuffer<cr>
  6. noremap <A-m> :LeaderfTag<cr>
  7. noremap <A-l> :LeaderfLine<cr>
  8. let g:Lf_StlSeparator = { 'left': '', 'right': '', 'font': '' }
  9. let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']
  10. let g:Lf_WorkingDirectoryMode = 'Ac'
  11. let g:Lf_WindowHeight = 0.30
  12. let g:Lf_CacheDirectory = expand('~/.vim/cache')
  13. let g:Lf_ShowRelativePath = 0
  14. let g:Lf_HideHelp = 1
  15. let g:Lf_StlColorscheme = 'powerline'
  16. let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}

6.5.2 NERDTree

一般的编辑器都有对应的目录树结构,vim下可以安装此插件来看项目的目录结构,也可以进入到各个文件中去

  1. "设置NERDTtree
  2. "let g:winManagerWindowLayout='FileExplorer|TagList'
  3. function! NERDTree_Start()
  4. exec 'NERDTree'
  5. endfunction
  6. function! NERDTree_IsValid()
  7. return 1
  8. endfunction
  9. let winheigh=10
  10. let g:AutoOpenWinManager=1
  11. map wm :NERDTreeToggle<CR>

6.5.3 vim-autoformat

自动格式化代码风格的插件,C语言配合clang-format使用

  1. sudo apt install clang-format
  2. # 配置如下
  3. Plug 'vim-autoformat/vim-autoformat'
  4. # 配置按F5自动格式化
  5. noremap <F5> :Autoformat<CR>:w<CR>
  6. let g:autoformat_verbosemode=1
  7. # 自动格式化
  8. au BufWrite *.c :Autoformat

6.6 vim里识别Alt键

  1. function! Terminal_MetaMode(mode)
  2. set ttimeout
  3. if $TMUX != ''
  4. set ttimeoutlen=30
  5. elseif &ttimeoutlen > 80 || &ttimeoutlen <= 0
  6. set ttimeoutlen=80
  7. endif
  8. if has('nvim') || has('gui_running')
  9. return
  10. endif
  11. function! s:metacode(mode, key)
  12. if a:mode == 0
  13. exec "set <M-".a:key.">=\e".a:key
  14. else
  15. exec "set <M-".a:key.">=\e]{0}".a:key."~"
  16. endif
  17. endfunc
  18. for i in range(10)
  19. call s:metacode(a:mode, nr2char(char2nr('0') + i))
  20. endfor
  21. for i in range(26)
  22. call s:metacode(a:mode, nr2char(char2nr('a') + i))
  23. call s:metacode(a:mode, nr2char(char2nr('A') + i))
  24. endfor
  25. if a:mode != 0
  26. for c in [',', '.', '/', ';', '[', ']', '{', '}']
  27. call s:metacode(a:mode, c)
  28. endfor
  29. for c in ['?', ':', '-', '_']
  30. call s:metacode(a:mode, c)
  31. endfor
  32. else
  33. for c in [',', '.', '/', ';', '{', '}']
  34. call s:metacode(a:mode, c)
  35. endfor
  36. for c in ['?', ':', '-', '_']
  37. call s:metacode(a:mode, c)
  38. endfor
  39. endif
  40. endfunc
  41. call Terminal_MetaMode(0)

6.7 vim复制粘贴系统剪切板

在使用vim时,使用频繁的功能就是,需要从浏览器,或者其他文件复制命令或者代码到vim中(或者反方向),查看是否vim支持系统剪切板功能,打开vim,输入:version查看 clipboard前面是否是加号或者减号,加号支持,减号不支持,如下图,我已经配置好了,所以支持

  1. :version
  2. VIM - Vi IMproved 9.0 (2022 Jun 28, 编译于 May 10 2022 08:40:37)
  3. 包含补丁: 1-105
  4. 修改者 team+vim@tracker.debian.org
  5. 编译者 team+vim@tracker.debian.org
  6. 巨型版本 GTK3 图形界面。 可使用(+)与不可使用(-)的功能:
  7. +acl +channel +cscope +ex_extra -hangul_input +linebreak +mouse_dec -mzscheme +profile +sodium +tcl +user_commands +wildmenu
  8. +arabic +cindent +cursorbind +extra_search +iconv +lispindent +mouse_gpm +netbeans_intg -python +sound +termguicolors +vartabs +windows
  9. +autocmd +clientserver +cursorshape -farsi +insert_expand +listcmds -mouse_jsbterm +num64 +python3 +spell +terminal +vertsplit +writebackup
  10. +autochdir +clipboard +dialog_con_gui +file_in_path +ipv6 +localmap +mouse_netterm +packages +quickfix +startuptime +terminfo +vim9script +X11
  11. -autoservername +cmdline_compl +diff +find_in_path +job +lua +mouse_sgr +path_extra +reltime +statusline +termresponse +viminfo -xfontset
  12. +balloon_eval +cmdline_hist +digraphs +float +jumplist +menu -mouse_sysmouse +perl +rightleft -sun_workshop +textobjects +virtualedit +xim
  13. +balloon_eval_term +cmdline_info +dnd +folding +keymap +mksession +mouse_urxvt +persistent_undo +ruby +syntax +textprop +visual +xpm
  14. +browse +comments -ebcdic -footer +lambda +modify_fname +mouse_xterm +popupwin +scrollbind +tag_binary +timers +visualextra +xsmp_interact
  15. ++builtin_terms +conceal +emacs_tags +fork() +langmap +mouse +multi_byte +postscript +signs -tag_old_static +title +vreplace +xterm_clipboard
  16. +byte_offset +cryptv +eval +gettext +libcall +mouseshape +multi_lang +printer +smartindent -tag_any_white +toolbar +wildignore -xterm_save

如果不支持,也就是clipboard前面为-号,需要安装包

  1. sudo apt-get install vim-gnome
  2. # 经朋友提醒,基本使用gtk替代gnome
  3. sudo apt-get install vim-gtk

安装好后,默认的复制到系统剪切板是使用"+y三个键组合,使用非常不方便,可以在.vimrc文件中增加配置,即可使用正常yp进行复制粘贴啦

  1. set clipboard=unnamedplus