首页 > 其他分享 >解决vim在终端ctrl+i无法跳转问题

解决vim在终端ctrl+i无法跳转问题

时间:2023-11-10 23:12:25浏览次数:36  
标签:Ctrl auto ctrl jek vim 跳转 NVCMD nv

总所周知,终端里使用vim只能Ctrl+o跳转到上一个位置,不能Ctrl+i跳转到下一个位置。因为xterm中tab和ctr+i都是一样,传递的键值是9,所以在vim中无法将tab和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函数后保存。

#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 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  

正式编译:

jek[2023-11-10 19:49]:~/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

然后就可以使用vim了。至此,可以用ctrl+g代替原来的ctrl+i完成跳转到下一个位置的功能。

参考:

https://zhuanlan.zhihu.com/p/46701273
https://www.cnblogs.com/JoiT/p/build_from_source_for_linux_vim.html

标签:Ctrl,auto,ctrl,jek,vim,跳转,NVCMD,nv
From: https://www.cnblogs.com/yangsail/p/17825302.html

相关文章

  • php针对某个网址实现302跳转如何实现?
    在PHP中实现一个HTTP302重定向非常简单。你需要编写一个简单的PHP脚本来设置HTTP头部,指示浏览器重定向到一个新的URL。以下是一个基本的步骤,展示了如何做到这一点:创建一个PHP文件:首先,你需要在你的web服务器上创建一个新的PHP文件。这个文件将包含重定向的代码。编写重定向代码......
  • js帮我实现单页面跳转到指定页面的技术!
    网站的根目录下的HTML文件中(通常是 index.html 或 index.php)使用 window.location 对象。以下是一个简单的HTML页面示例,它包含了JavaScript代码,用于执行这样的重定向:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compa......
  • js能实现301跳转吗,能返回301状态码?举个代码例子
    在JavaScript中实现301重定向通常是在服务器端进行的,因为301重定向是一种永久性的重定向,它需要在HTTP响应中设置状态码。客户端JavaScript(例如在浏览器中运行的)通常不能直接设置HTTP状态码,因为这是由服务器处理的。但是,如果你在服务器端使用Node.js,你可以实现301重定向。以下是一......
  • 在vue中页面跳转有几种方法?
    在Vue中,有几种方法可以实现页面跳转。以下是常用的几种方法:使用<router-link>组件:如果你使用了VueRouter来进行路由管理,可以使用<router-link>组件来创建带有路由的链接。例如:<router-linkto="/about">About</router-link>使用编程式导航:VueRouter还提供了编程式导航的......
  • Vim命令合集分类
    Vim命令合集命令历史以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim直接启动vimvimfilename打开vim并创建名为filename的文件文件命令打开单个文件vimfile同时打开多个文件vimfile1file2f......
  • 跳转(Forward)和页面重定向(Redirect)的区别
    Redirect1.用户浏览器向http://localhost:8080/demo/start.xhtml发送GET请求。2.JSF收到请求,返回start.xhtml页面。3.用户点击页面中的按钮。4.JSF收到请求,向浏览器发送Redirect指令(3XX的HTTP状态值)。5.浏览器收到指令,发送另一个G......
  • 让你的 bash 命令行像 vim 一样飞:一行代码搞定
    引言你是不是觉得在Bash命令行界面中编辑命令有时候很不方便?尤其是当你需要修改一个长命令的某个部分时,使用方向键来回移动光标简直是一场噩梦。如果你是Vim的忠实用户,那么我有一个好消息要告诉你:你可以把Bash的按键模式设置成Vi模式,让你的命令行体验瞬间飞起来!公众号【厦门......
  • nginx配置http跳转https的几种要求和方式记录
    以nginx-1.23.2测试 (80被占用了,测试换成81端口)要求一:nginx端口有443,81,即能访问http访问81,也能https访问。nginx配置如下:server{listen81;listen443ssl;server_namexx.com.cn192.168.3.1127.0.0.1;ssl......
  • 项目中难点-A页面中填写查询条件并查询出表格数据后,点击详情跳转页面B,B页面返回A页面
    页面缓存keep-alive1、在路由routes中配置需要进行缓存的页面keepAlive:truemeta:{keepAlive:true,title:"页面名称",}如图: 2、在router-view显示的入口页面APP.vue中,对需要的页面进行缓存<template><divid="app"><router-viewv-if="!$route.meta.kee......
  • 这个你也会!下载vimeo视频保存到手机相册
    Vimeo是一个超赞的视频分享和上传场所!在这里,你可以尽情展示高质量视频内容和狂热创意作品。而且,你知道吗?有些Vimeo视频还可以轻松下载到本地呢!操作简单到爆炸,只需几下鼠标点击就搞定!保存vimeo视频详细教程见下:①选择vimeo中的单个视频,复制链接,②打开【大神水印】(安卓苹果商店皆......