解决vim在终端ctrl+i无法跳转问题
总所周知,终端里使用vim只能Ctrl+o跳转到上一个位置,不能Ctrl+i跳转到下一个位置。因为xterm中tab和ctr+i都是一样,传递的键值是9,所以在vim中无法将tab和vim的ctr_i分离使用。
这篇文章来解决这个问题。ctrl+g用于显示正在编辑的文件名,文件大小和位置信息,今天就牺牲ctrl+g原有的功能来实现ctrl+i的功能。有了状态栏插件以后ctrl+g原本的功能可有可无。以下以ubuntu中为例子。
下载vim源码
github打不开,这里从gitee上面下载:https://gitee.com/mirrors/vim/tags
修改源码
下载完后,打开目录有以下文件:
jek:~/Downloads$ cd vim-v9.0.2020/ jek:~/Downloads/vim-v9.0.2020$ ls ci CONTRIBUTING.md LICENSE nsis READMEdir README.txt runtime src uninstall.txt vimtutor.com configure Filelist Makefile pixmaps README.md README_VIM9.md SECURITY.md tools vimtutor.bat
找到src/nv_cmds.h文件,里面定义了按键与相应处理函数的映射。将Ctrl_G那一行的nv_ctrlg函数改成nv_pcmark函数后保存。
/* * Used when creating nv_cmdidxs.h. */ # define NVCMD(a, b, c, d) a static const int nv_cmds[] = #endif // DO_DECLARE_NVCMD { NVCMD(NUL, nv_error, 0, 0), NVCMD(Ctrl_A, nv_addsub, 0, 0), NVCMD(Ctrl_B, nv_page, NV_STS, BACKWARD), NVCMD(Ctrl_C, nv_esc, 0, TRUE), NVCMD(Ctrl_D, nv_halfpage, 0, 0), NVCMD(Ctrl_E, nv_scroll_line, 0, TRUE), NVCMD(Ctrl_F, nv_page, NV_STS, FORWARD), /* NVCMD(Ctrl_G, nv_ctrlg, 0, 0), */ NVCMD(Ctrl_G, nv_pcmark, 0, 0), NVCMD(Ctrl_H, nv_ctrlh, 0, 0), NVCMD(Ctrl_I, nv_pcmark, 0, 0), NVCMD(NL, nv_down, 0, FALSE), NVCMD(Ctrl_K, nv_error, 0, 0), NVCMD(Ctrl_L, nv_clear, 0, 0), NVCMD(CAR, nv_down, 0, TRUE), NVCMD(Ctrl_N, nv_down, NV_STS, FALSE), NVCMD(Ctrl_O, nv_ctrlo, 0, 0), NVCMD(Ctrl_P, nv_up, NV_STS, FALSE),
编译vim
编译之前需安装依赖库,python之前已经安装了这里不再展示。
jek:~/Downloads/vim-v9.0.2020$ sudo apt install python3-dev jek:~/Downloads/vim-v9.0.2020$ sudo apt install libncurses5-dev jek:~/Downloads/vim-v9.0.2020$ sudo apt install libgtk2.0-dev libatk1.0-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev
只配置python3。
./configure --with-features=huge \ --enable-cscope \ --enable-fontset \ --enable-python3interp=yes \ --with-python3-config-dir=/usr/lib/python3.10/config-3.10m-x86_64-linux-gnu \ --with-python3-command=/usr/bin/python3 \ --enable-multibyte \ --enable-luainterp # --with-features=huge:支持最大特性 # --enable-rubyinterp:打开对ruby编写的插件的支持 # --enable-pythoninterp:打开对python编写的插件的支持 # --enable-python3interp:打开对python3编写的插件的支持 # --enable-luainterp:打开对lua编写的插件的支持 # --enable-perlinterp:打开对perl编写的插件的支持 # --enable-multibyte:打开多字节支持,可以在Vim中输入中文 # --enable-cscope:打开对cscope的支持 # --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ 指定python 路径 # --with-python-config-dir=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/ 指定python3路径 # --prefix=/usr/local/vim:指定将要安装到的路径(自行创建)
不做上面这步,安装补全插件后会报以下错误:
YouCompleteMe unavailable: requires Vim compiled with Python (3.8.0+) support.
然后执行compile_config.sh
jek:~/Downloads/vim-v9.0.2020$ sh compile_config.sh
正式编译:
jek:~/Downloads/vim-v9.0.2020$ make Starting make in the src directory. If there are problems, cd to the src directory and run make there cd src && make first make[1]: Entering directory '/home/jek/Downloads/vim-v9.0.2020/src' rm -f auto/config.status auto/config.cache config.log auto/config.log rm -f auto/config.h auto/link.log auto/link.sed auto/config.mk touch auto/config.h cp config.mk.dist auto/config.mk cd testdir; make -f Makefile clean make[2]: Entering directory '/home/jek/Downloads/vim-v9.0.2020/src/testdir' ...... ......
卸载vim
如果安装了vim先将vim删掉,~/.vimrc
文件和~/.vim
文件夹不需要删除。
sudo apt remove vim
安装vim
默认安装到/usr/local/share/vim/vim90
和/usr/local/bin
目录下。
jek:~/Downloads/vim-v9.0.2020$ sudo make install # 创建链接 jek:/usr/local/bin$ sudo ln /usr/local/bin/vim /usr/bin/vim
查看是否支持python3,有‘+’表示支持
jek:~/Downloads/vim-v9.0.2020$ vim --version |grep python +cmdline_hist +langmap -python +viminfo +cmdline_info +libcall +python3 +virtualedit Linking: gcc -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -l pangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lfontconfig -lfreetype -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo - lselinux -L/usr/lib/python3.10/config-3.10m-x86_64-linux-gnu -lpython3.10
也可以打开vim输入:echo has("python3")
,结果为1就表示支持python3。
然后就可以使用vim了。至此,可以用ctrl+g代替原来的ctrl+i完成跳转到下一个位置的功能。
参考:
https://zhuanlan.zhihu.com/p/46701273
https://www.cnblogs.com/JoiT/p/build_from_source_for_linux_vim.html
作者:yangsail
出处:https://www.cnblogs.com/yangsail/p/17825302.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通