解决 Vim 上下左右变成 ABCD 的问题
解决 Vim 上下左右变成 ABCD 的问题
Vim 是 Linux 和 Unix 系统上广受欢迎的编辑器,但许多用户在首次使用时会遇到一些让人困惑的问题,例如:按下上下左右键时光标不移动,而是输出 A
、B
、C
、D
字母。这篇文章将深入分析该问题的解决方法,并分享一些提高 Vim 使用效率的高级技巧。
一、问题缘由
1. 初次发现问题
某次编辑文件时,按上下左右键出现了意外的行为:屏幕输出了 A
、B
、C
、D
,而不是移动光标。这种情况常见于:
- Vim 配置文件(
vimrc
)缺失或配置不完整; - Vim 启用了兼容模式(compatible mode),导致现代键盘输入处理不正常;
- 系统终端或键盘输入方式与 Vim 不完全兼容。
2. 问题的常见原因
- 兼容模式问题:Vim 默认可能启动在兼容模式下,而兼容模式是为了模拟传统的 Vi 编辑器,功能受限;
- 配置文件缺失:缺少必要的
vimrc
配置,导致按键映射和输入模式未正确启用; - 终端问题:一些终端(如某些远程 SSH 工具)在处理 Vim 的特殊按键时可能有兼容性问题。
二、解决问题
1. 排查配置文件
首先检查系统中是否存在 vimrc
配置文件以及其状态:
ls -l /etc/ | grep vim
执行命令后,发现两个文件:
vimrc.rpmnew
:系统默认的 Vim 配置文件(安装时生成),内容较全面;vimrc
:我修改过的配置文件,内容较简陋。
2. 合并配置文件
将 vimrc.rpmnew
的内容合并到 vimrc
中。关键步骤如下:
-
查看
vimrc.rpmnew
文件内容:cat /etc/vimrc.rpmnew
-
编辑现有的
vimrc
文件:vim /etc/vimrc
-
将
vimrc.rpmnew
中的关键设置添加到vimrc
中,例如:set nocompatible " 关闭兼容模式,启用现代功能 set backspace=indent,eol,start " 修复退格键和其他键的行为 syntax on " 启用语法高亮 filetype plugin indent on " 根据文件类型自动加载插件和缩进
-
保存退出后重新启动 Vim,问题即可解决。
三、Vim 的使用技巧
解决按键问题后,我们还可以通过一些实用技巧和设置,让 Vim 更强大、更高效。
1. 常用快捷键
-
快速移动:
w
:跳转到下一个单词的开头;e
:跳转到当前单词的结尾;gg
:跳转到文件顶部;G
:跳转到文件底部;Ctrl-d
/Ctrl-u
:向下/向上滚动半屏。
-
快速编辑:
x
:删除光标所在的字符;dd
:删除整行;yy
:复制整行;p
:粘贴;u
:撤销操作;Ctrl-r
:重做操作。
-
文本查找与替换:
/keyword
:查找关键字;:n
:跳转到下一个匹配项;:%s/old/new/g
:全局替换old
为new
。
2. Vim 高级功能
2.1 宏录制和重复操作
当需要重复执行一系列操作时,宏录制非常有用:
- 录制宏:按下
q
后跟一个字母(例如a
),开始录制; - 执行操作,完成后按下
q
停止录制; - 重复宏:按下
@a
执行宏操作。
2.2 多文件编辑
- 垂直分屏:
:vsp filename
,分屏打开新文件; - 水平分屏:
:sp filename
; - 切换分屏:使用
Ctrl-w
+ 方向键。
2.3 标签页功能
- 打开新标签页:
:tabnew filename
; - 切换标签页:
gt
(下一个标签页)或gT
(上一个标签页)。
2.4 自动补全
启用 Vim 的自动补全功能可以大幅提高效率:
set wildmenu
set completeopt=menu,menuone,noselect
输入时可以通过 Tab
或 Ctrl-n
选择补全。
3. 定制化配置
通过修改 ~/.vimrc
文件,可以创建更符合自己使用习惯的 Vim 配置。
3.1 自定义快捷键
为常用操作绑定快捷键:
" 映射快捷键
nnoremap <leader>w :w<CR> " 按 <leader>w 保存文件
nnoremap <leader>q :q<CR> " 按 <leader>q 退出 Vim
nnoremap <leader>h :set hlsearch!<CR> " 切换搜索高亮
默认 leader
键是 \
,也可以在 vimrc
中更改:
let mapleader=","
3.2 美化界面
set number " 显示行号
set cursorline " 高亮当前行
colorscheme desert " 设置主题(desert 可替换为其他主题)
核心配置总结:
- 确保 Vim 启用了
nocompatible
模式; - 定制
vimrc
文件,添加常用的快捷键、搜索和补全配置; - 善用分屏、多标签功能提升编辑效率。
Vim 是一款功能强大的工具,只要用心配置,它可以成为你日常工作的得力助手。
如果你也遇到类似问题或有其他 Vim 技巧分享,欢迎留言讨论! 😊
相关文章:
解决 Vim 上下左右变成 ABCD 的问题
解决 Vim 上下左右变成 ABCD 的问题 Vim 是 Linux 和 Unix 系统上广受欢迎的编辑器,但许多用户在首次使用时会遇到一些让人困惑的问题,例如:按下上下左右键时光标不移动,而是输出 A、B、C、D 字母。这篇文章将深入分析该问题的解…...
并发编程(14)——内存栅栏
文章目录 十四、day141. 内存栅栏1.1 什么是栅栏1.2 栅栏和原子操作的对比1.2.1 获取操作1.2.2 释放操作 1.3 线程可见顺序1.4 通过栅栏保证指令编排顺序1.5 通过栅栏令非原子操作服从内存次序1.6 同步线程间的内存访问 十四、day14 在学习完内存模型、内存序、原子类型、操作…...
消息中间件用途介绍
1. 解耦(Decoupling): • 消息中间件能够将消息的生产者(Producer)和消费者(Consumer)分离开来,使它们不必直接相互依赖。这种设计降低了系统的耦合度,提升了系统的可扩展…...
Algorithms and Data Structures in C++ by Mohammed Yasir Eramangadan
MP4 创建 |视频:h264、1280720 |音频:AAC,44.1 KHz,2 通道 类型:在线学习 |语言:英文 字幕 |持续时间: 159 讲座 ( 10h 43m ) |大小: 3.5 GB “通过专家制作…...
Binder架构
一、架构 如上图,binder 分为用户层和驱动层两部分,用户层有客户端(Client)、服务端(Server)、服务管理(ServiceManager)。 从用户空间的角度,使用步骤如下(…...
【第十一课】Rust并发编程(二)
目录 前言 Channel 多生产者 前言 在上一节中,我们介绍了Rust中并发编程的方式之一:Fork和Join,通过新建线程提升代码的效率,这节课我们介绍并发编程的第二种方式:通道。Channel就类似于水管,通过Channe…...
网络知识1-TCP/IP模型
从用户端到服务端,tcp/ip模型可分为应用层、传输层、网络层、网络接口层 以下使用寄快递为例进行解释 应用层职责: 只关注与为用户提供应用功能,如HTTP、FTP、telnet、DNS、SMTP等 ,应用层的职责就像我们寄快递时将快递给快递员…...
burpsuite(2)最新版burpsuite安装教程
一、安装Java 1.安装jdk21,直接官网下载 下载链接:Java21 2.cmd 输出java(查看java是否已经被安装) 3.java -version(查看java版本) 二、安装burpsuite 4.下载burpsuite最新版本,选择jar方式…...
微知-arp如何删除所有表项?(arp -d; ip neighbor delete 192.168.0.100)
ar命令删掉所有表项 sudo arp -d使用ip命令 ip neighbor delete 192.168.0.100...
使用guzzlehttp异步多进程实现爬虫业务
Python和PHP核心技术共享平台 背景 小哥近来在通过动态代理池爬取一些公司需要的大文件pdf规格书的处理。遇到的难点,如何保证服务器CPU、连接数等正常情况下,多进程、异步快速处理这些业务并且保证准确。下面小哥就给看官唠嗑一下,我使用gu…...
websocket前后端长连接之java部分
一共有4个类,第一个WebSocketConfig 配置类 Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Autowiredprivate WebSocketHandler webSocketHandler;Autowiredprivate WebSocketInterceptor webSocketInterceptor;Overridepubli…...
无线感知会议系列【16】QGesture-1
摘要: 这是2018年发表的一篇 paper 《 Quantifying Gesture Distance and Direction with WiFi Signals》 下一篇重要分享 Decimeter-level localization with a single WiFi access point,主要创新点是如何对CFO SFO PBD 噪声进行去噪。 许多人机交互&…...
如何用通义灵码快速绘制流程图?
使用通义灵码快速绘制流程图?新功能体验 不想读前人“骨灰级”代码,不想当“牛马”程序员,想像看图片一样快速读复杂代码和架构? 通义灵码已经支持代码逻辑可视化,可以把你的每段代码画成流程图。像个脑图工具一样帮你…...
如何搭建一个小程序:从零开始的详细指南
在当今数字化时代,小程序以其轻便、无需下载安装即可使用的特点,成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业,小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序,本文将为你提供一个从零开始的详细…...
wp the_posts_pagination 与分类页面搭配使用
<ul> <?php while( have_posts() ) : the_post(); <li > <a href"<?php the_permalink(); ?>"> <?php xizhitbu_get_thumbnail(thumb-pro); ?> </a> <p > <a href&q…...
文件包含漏洞
本质 本质和SQL注入相同,都是输入一段用户可以控制的脚本或代码,让服务器执行 包含就比如把函数写在一个文件里,调用函数时直接用文件 文件包含漏洞就是攻击者修改了文件的位置,让后台执行任意文件 函数 (PHP&…...
docker快速安装zookeeper
一、拉取镜像 docker pull zookeeper:3.9.3 二、启动zookeeper docker run --restartalways -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper:3.9.3 如果需要挂载zookeeper文件及目录,则参数增加: -v /mydata/zookeeper/d…...
如何解决 java.security.acl.NotOwnerException: 在 ACL 中尝试执行非所有者的操作问题?亲测有效的解决方法!
在 Java 中,java.security.acl.NotOwnerException 异常通常出现在访问控制列表(ACL)操作中。当你尝试在一个不属于拥有者的实体上执行特定的操作时,Java 安全管理器会抛出此异常。简单来说,它指的是你正在尝试执行一个…...
【电力行业标准】《电力信息化软件工程度量规范》(DL/T 2015-2019)-费用标准解读系列20
《电力信息化软件工程度量规范》(DL/T 2015-2019)是国家能源局2019年6月4日发布,2019年10月1日实施的电力行业标准(了解更多可直接关注我们咨询),规定了电力行业信息化软件工程度量原则与内容、成本构成及各…...
python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。 python之open…...
JavaEE---计算机是如何工作的?
1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…...
数据结构(Java版)第五期:ArrayList与顺序表(下)
目录 一、用数组实现顺序表 一、用数组实现顺序表 我们提到过,顺序表是基于数组的封装,这次我们以int为例,用数组去实现一个顺序表。 public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr n…...
Docker和Docker Compose部署方式的区别以及各自适用的场景(ChatGPT-4o回答)
prompt: 请详细介绍和解释一下docker和docker compose部署两者之间的区别和使用场景 Docker和Docker Compose是用于容器化应用程序的两个重要工具,它们在功能和使用场景上有一些关键区别。 Docker Docker是一个开源平台,用于开发、运输和运行应用程序。…...
JavaSE---异常
1.异常的体系结构 Thorwable是异常类顶层类,派生出了Error和Exception Error:指的是JVM层面无法解决的问题,如JVM内部错误,资源耗尽等..一旦发生很难解决。 Exception:异常发生后可以通过代码处理,使程序继…...
大模型的认知记录:一次与4o讨论道德经的对话 - “我无法触碰“真实的花草树木”(无名),但通过语言(有名),我可以靠近人类的认知方式。”
因为其它人都去放假了,我比较悠闲,于是想再强化下认知和正念方面的东西。对于世界的感知,只要不强迫训练,很容易被现实世界给侵蚀了。记得去年有幸悟到点什么,感受点什么,但慢慢那种感受变得虚无起来了&…...
std::srand(static_cast<unsigned int>(std::time(0)));每一部分都是啥意思
std::srand(static_cast<unsigned int>(std::time(0))); 这行代码在C中用于初始化随机数生成器的种子。下面我将逐一解释这行代码中的每个部分: std::time(0): std::time 是C标准库中的一个函数,它返回当前时间(自1970年1月1日以来…...
云计算之elastaicsearch logstach kibana面试题
1.ELK是什么? ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写 Elasticsearch:负责日志检索和储存 Logstash:负责日志的收集和分析、处理 Kibana:负责日志的可视化 这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,…...
汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳
故障现象 一辆2017款捷豹F-PACE车,搭载2.0 L GTDi发动机,累计行驶里程约为16万km。车主反映,车辆组合仪表上发动机故障灯点亮(图1),且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…...
20241124 Typecho 视频插入插件
博文免不了涉及到视频插入这些,网上的插件都或多或少的比较重,和Typecho的风格不搭配 后面就有了DPlay插件精简而来的VideoInsertion插件 VideoInsertion: Typecho 视频插入插件 目录结构 rockhinlink-ht2:/var/www/html/typecho/usr/plugins/VideoInsertion$ tree -h [4.…...
【接口调试】OpenAI ChatGPT API
【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...
ubuntu安装chrome无法打开问题
如果在ubuntu安装chrome后,点击chrome打开没反应,可以先试着在terminal上用命令打开 google-chrome 如果运行命令显示 Chrome has locked the profile so that it doesnt get corrupted. If you are sure no other processes are using this profile…...
【R安装】VSCODE安装及R语言环境配置
目录 VSCODE下载及安装VSCODE上配置R语言环境参考 Visual Studio Code(简称“VSCode” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器&…...
什么是 Token 和 MD5 ?
目录 一:Token和MD5分别是什么 1:Token 2:MD5 二:简易Token的实现 1:Base64。 2:验证Token 三:MD5的使用 一:Token和MD5分别是什么 1:Token Token 的中文有人翻译成…...
Kubernetes(k8s)1.30.7简单快速部署对外部开放的有状态服务MYSQL8(快速有效)
如何在Kubernetes集群中快速创建部署一个单节点的有状态(即将数据文件挂载到宿主机,防止重新部署mysql服务,数据文件丢失)的对外开放的MYSQL服务。 通过创建一个 Kubernetes Deployment 并使用 PersistentVolumeClaim 将其连接到…...
基于Linux的repmgr搭建
第一部分 说明 repmgr是一个开源工具套件,用于管理 PostgreSQL 服务器集群中的复制和故障转移。它通过设置备用服务器、监控复制和执行管理任务(例如故障转移或手动切换操作)的工具增强了 PostgreSQL 的内置热备用功能。 PostgreSQL在9.0后引…...
Diff差异算法
目录 虚拟DOM Diff算法 Diff过程 示例 总结 在Vue.js中,虚拟DOM(Virtual DOM)是其核心特性之一,它极大地提高了DOM更新的效率。Vue.js使用虚拟DOM的diff算法来比较新旧虚拟DOM树,从而确定最小的DOM更新操作。这种…...
visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…...
字符串分割转换(Java Python JS C++ C )
题目描述 给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母; 反之,如果它…...
第33章 - Go语言 云原生开发
第33章 - 云原生开发将深入探讨云原生技术及其在现代软件开发中的应用。我们将从云原生的基本概念开始,逐步介绍Kubernetes的基本使用方法,并结合具体的云服务提供商实例,通过Go语言编写的应用程序来展示如何实现云原生开发。 33.1 云原生的…...
springboot配置多数据源mysql+TDengine保姆级教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom文件二、yamlDataSourceConfigServiceMapper.xml测试总结 前言 Mybatis-plus管理多数据源,数据库为mysql和TDengine。 一、pom文件 <de…...
RocketMQ负载均衡机制解析
消费者在消费消息的时候,需要知道从Broker的哪一个消息队列中去获取消息。 ❝ 所以,在消费者端必须要做负载均衡,即Broker端中多个消费队列分配给同一个消费者组中的哪些消费者消费。 在RocketMQ中,在消费者端有一个:R…...
PyTorch 模型转换为 ONNX 格式
PyTorch 模型转换为 ONNX 格式 在深度学习领域,模型的可移植性和可解释性是非常重要的。本文将介绍如何使用 PyTorch 训练一个简单的卷积神经网络(CNN)来分类 MNIST 数据集,并将训练好的模型转换为 ONNX 格式。我们还将讨论 PTH …...
大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Sequence-to-Sequence, Seq2Seq)模型是解决序列输入到序列输出任务的核心架构,广泛应用于机器翻译、文本摘要和问答系统等自然语言处理任务中。本篇文章深入介绍 Seq2Seq 模型的原理及其核心组件(…...
elasticsearch安装ik分词器
本文主要记录如何安装ik分词器,如果你刚好刷到了这篇文章,希望对你有所帮助。 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式&…...
QT6之主站freemodbus1.6移植
本次使用的QT是6.8 下载1.6的freemodbus资源包:至少以上的吧 随便下载:官网也可以这个是STM芯片的教程,移植基本一样,略有不同; STM32 移植FreeModbus详细过程-CSDN博客 移植freemodbus: 添加资源文件&a…...
【错误❌】——槽函数定义好但未初始化
public slots:void onClose(); 初始化即可成功:...
数据结构(理解)
探索数据结构:计算机世界的基石 在计算机科学的领域中,数据结构就如同建筑中的基石,它们支撑着整个软件世界的运行。无论是简单的应用程序,还是复杂的大型系统,数据结构都在其中起着至关重要的作用。 一、什么是数据结…...
ROS2 细节知识学习
1. rosidl_generate_interfaces() 在 ROS2 中,rosidl_generate_interfaces是一个关键的构建工具功能。它主要用于从接口定义文件(如.msg消息文件、.srv服务文件和.action动作文件)生成不同编程语言(如 C、Python 等)可…...
SQL进阶——JOIN操作详解
在数据库设计中,数据通常存储在多个表中。为了从这些表中获取相关的信息,我们需要使用JOIN操作。JOIN操作允许我们通过某种关系(如相同的列)将多张表的数据结合起来。它是SQL中非常重要的操作,广泛应用于实际开发中。本…...