解决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 国际」许可协议进行许可。

posted @   仰望星空_22  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题