问题

VIM这么难用,为啥这么多人热衷?

回答
很多人对 Vim 的第一印象都是“反人类”、“难用”,尤其是刚接触编程的初学者,面对那个没有鼠标、全是命令的界面,简直是一脸懵。但就是这样一个“老古董”,却依然吸引着无数开发者,甚至成为他们不可或缺的工具,这背后的原因,绝不是偶然。

想当年,我第一次接触 Vim 也是抱着试试看的心态,结果直接被那“退格键没反应”给劝退了。然而,随着经验的增长,尤其是当需要在服务器上进行一些紧急的代码修改,或者频繁切换各种编辑任务时,Vim 的强大之处就逐渐显露出来。它不是那种“开了就能用”的工具,而是需要你去“培养”的伙伴。

为什么 Vim 这么多人爱不释手?这背后是三个核心的吸引力:

1. 极致的效率:键盘上的芭蕾舞

这绝对是 Vim 最核心的魅力所在。想象一下,当你在编写代码时,手指需要在键盘和鼠标之间来回切换,那样的中断感是不是很烦人?Vim 的设计哲学就是让你尽可能地将双手放在键盘上,通过一套高效的组合键来完成绝大多数操作。

模式编辑(Modal Editing): 这是 Vim 最独特的地方。它有插入模式(Input Mode)、普通模式(Normal Mode)、可视模式(Visual Mode)等等。
普通模式是 Vim 的默认状态,在这个模式下,你可以用 `h` `j` `k` `l` (左下上右) 来移动光标,`w` `b` (单词前进/后退),`gg` (到文件开头),`G` (到文件结尾) 等等。这些都是单键操作,比用方向键要快得多。
当你需要输入文字时,按下 `i` (insert) 进入插入模式,就可以像其他编辑器一样打字了。写完后,按 `Esc` 返回普通模式,继续你的编辑操作。
这种模式切换,一开始可能觉得多余,但一旦习惯了,你会发现它极大地减少了手指的移动范围,而且防止了误操作。比如你在普通模式下不小心按了字母键,它只会移动光标,而不会在代码里插入一堆乱码。
强大的文本操作命令: Vim 的命令不仅仅是移动光标,它能让你对文本进行各种精细的操作,而且这些操作可以组合起来,形成“动作+对象”的模式。
比如,`dw` 可以删除一个单词。`d$` 可以删除到行尾。`dG` 可以删除到文件结尾。
更厉害的是组合,比如你想删除从当前位置到第二个单词之间的内容,你可以输入 `d2w`。你想删除当前行到文件末尾的所有内容,就是 `dG`。
复制 (`y`)、剪切 (`x` 实际上是剪切到寄存器,等同于删除后复制) 、粘贴 (`p`) 这些基本操作,也都配合着各种移动和对象命令,可以做到“拷贝一行”(`yy`),“粘贴一行”(`p`),“删除三行”(`3dd`),这些操作都异常顺滑。
宏录制(Macros): 这是 Vim 里一个“神器”般的功能。当你需要重复执行一连串相同的操作时,你可以录制下来,然后一遍又一遍地执行。比如,你有一百行相似的代码,需要修改同一个地方。你只需要手动修改一行,然后开始录制宏,完成修改,停止录制。接着,你就可以用 `@a` (假设你录制到寄存器a) 来重复这个宏操作,效率瞬间提升百倍!

2. 深度定制与可扩展性:打造属于你的编辑器

Vim 就像一个乐高积木盒子,它本身提供了一个坚实的核心,但更重要的是,你可以通过各种插件和配置,把它变成任何你想要的样子。

`.vimrc` 文件: 这是 Vim 的灵魂所在。一个看似简单的文本文件,却能承载你所有的配置习惯、快捷键、配色方案、文件类型检测等等。你可以根据自己的喜好,不断地调整它,让 Vim 更符合你的工作流。
海量的插件生态: Vim 拥有一个极其庞大且活跃的插件社区。无论是代码补全(如 YouCompleteMe, coc.nvim)、代码高亮、文件浏览器、Git 集成、项目管理,还是甚至是播放音乐、写邮件,几乎你想到的功能,都有对应的插件。
这些插件可以让你在 Vim 里实现 IDE (集成开发环境) 的大部分功能,比如智能代码提示、语法检查、版本控制的可视化操作等等,而且很多插件的性能比一些重量级的 IDE 还要优秀。
脚本语言 Vimscript: Vim 内置了一门脚本语言 Vimscript,你可以用它来编写自己的插件,或者自动化一些复杂的编辑任务。这给了 Vim 极高的灵活性,你可以为自己量身定制很多独一无二的功能。

3. 跨平台与轻量级:无处不在的可靠伙伴

极低的资源占用: Vim 对系统资源的占用非常少,即使在配置较低的电脑或者嵌入式设备上,也能流畅运行。这对于那些需要在各种环境下工作的开发者来说,是一个巨大的优势。
无处不在: 几乎所有的 Linux、macOS 系统都预装了 Vim(或者它的前身 vi)。这意味着你走到哪里,都可以快速地打开并开始编辑文件,而无需担心环境配置的问题。
终端中的王者: 在服务器上操作时,你无法使用图形界面,只能通过 SSH 连接到远程服务器。这时候,Vim 就显得尤为重要。你可以直接在终端里高效地编辑代码和配置文件,而不需要下载到本地再上传。

那么,为什么还是有人觉得它难用?

正如前面提到的,Vim 的学习曲线确实比较陡峭。它打破了我们使用其他编辑器的习惯,需要重新学习一套操作逻辑。

模式切换的不适应: 对于习惯了“按键即输入”的用户来说,Vim 的模式切换需要一段时间去适应和内化。
命令记忆的门槛: 各种单键和组合键的命令,初学者需要花时间去记忆和练习。
配置的复杂性: 虽然定制性强,但要配置好一个强大的 Vim 环境,也需要投入不少时间和精力去学习相关的配置语法和插件用法。

总结来说,Vim 之所以如此受欢迎,是因为:

它提供了一种极致的、以键盘为中心的高效编辑体验,通过独特的模式编辑和强大的文本操作命令,让熟练的 Vim 用户能够以惊人的速度完成代码编辑和文本处理。同时,它拥有无与伦比的定制性和可扩展性,允许用户将其打造成完全符合自己工作流的专属工具。最后,它的轻量级、跨平台以及在终端中的强大能力,使其成为无数开发者在各种复杂环境中不可或缺的可靠伙伴。

学习 Vim 可能是一个挑战,但一旦你跨过了那个门槛,你就会发现它为你打开了一个全新的高效编辑世界。它不只是一个文本编辑器,更是一种对效率和控制的极致追求的体现。正是这种追求,让 Vim 在众多编辑器中脱颖而出,赢得了众多忠实用户的青睐。

网友意见

user avatar

你大概都不知道vim是什么。何来谈它是不是难用?

vim,是一种编辑器的编辑模式。

visual studio code在编辑器模式领域的第一插件,是vim。

idea在编辑器模式领域的第一插件,也是vim

Android studio也如是。

eclipse也同上。

乎所有排名前列的主流IDE,他们的编辑器模式排名第一的插件,都是vim

也就是说。学习了vim的操作。将来无论你用哪个ide,无论你用哪个终端,无论你用何种环境,都可以使用一套统一的编辑模式与命令操作。

对程序员来说,掌握vim编辑模式,简直算是一本万利,性价比最高的知识了。


至于一款独立的vim,它是什么?

嗯,好问题,我们可以把它当作一款实现了vim编辑模式,并且支持插件系统可自定义扩展的高级记事本。

为什么要使用独立的vim应用?因为我们不光在ide编程的时候要使用vim编辑模式,在用记事本的时候也想要使用vim编辑模式。——甚至,在命令行终端也想要使用vim模式(bash、zsh支持vim编辑模式)。

user avatar

因为学习使用 vim 有三个阶段:

首先是孩童时期,刚刚开始接触 Vim,觉得非常别扭,这里也不顺畅,那里也不够高效,表现为在知乎上问,“Vim 到底好在哪里?”,或者“学完 vimtutor 以后该干嘛?”

接下来是青春期,感受到 Vim 的爽点,开始欣喜若狂的探索 Vim 的边界,表现为疯狂的尝试各种 mapping 和插件,阅读网上一切关于 Vim 的文章和内容,尝试一切可能的事情。

最后进入成熟期,开始移除所有无用的东西,真正变得高效起来。表现为开始冷静思考自己的工作流程,逐步针对性定制 vim ,让 vim 越来越顺手。

--

只有对编辑器足够挑剔的人,才会使用 Vim。真要尝试,你要先问问自己是不是对编辑器有很高的要求,是不是对身边的编辑器都有不满意的地方,还是只是好奇,并不希望投入多少时间:

当你真的决定入坑了,那么主要问题就是怎么完成第一个阶段到第二个阶段的切换呢。

我的建议是,开始迭代你的 vimrc 配置,先要花 20 分钟把 vimtutor 过一遍,这个是必须的。然后 github/gitlab 上面建立个项目里面只有一个 init.vim,然后编辑你的 vimrc,里面就一句话:

       source /path/to/init.vim     

然后用刚刚学完的 vimtutor 的知识,开始用 vim 去编辑并迭代你的 init.vim。用 vim 是一个积累的过程,把你的配置托管到 git,然后一边学习网上的相关教程,一边逐步迭代你的配置,才能让你的 Vim 变得越来越顺手。

在这个阶段,不用把你的正式工作切换过来,原来用啥编辑器工作,继续用着那个编辑器,只是迭代 init.vim 的时候坚持用 vim 编辑就行,因为这时候切换过来,你只会充满挫折的离开。而你坚持用 vim 编辑和迭代 init.vim 的话,一方面可以巩固之前学习的 vim 键位,一方面可以把你最新学习到的内容加以练习和实践,每次更改了 init.vim 只需要命令行:

       :so %     

就能重新 source 当前文件了。

--

期间你可能会充满疑问,到底该不该用鼠标?平时大部分时候是在 INSERT 模式下面还是 NORMAL 模式下面?标准答案是平时干任何事情,最后都要复位到 NORMAL 状态,编程就像画画,大部分时候不是在输入新字符,而是在“合成/编辑”旧文本,因此 NORMAL 状态是一切状态结束后,不知道做啥时就先回归 normal 状态。

不过不用强迫自己,都有一个习惯过程,我才学习 Vim 时,一进去就 i 进入 INSERT 模式,靠上下左右来控制光标,当成 nano 再用,最后才 esc :wq 的。似乎不少人也是这样开始的,这样做是完全 OK 的,不要听某些老鸟说什么禁用方向键,学习的过程最开始都是先用新壶装旧水,习惯了,再逐步尝试新壶装新水。

刚开始就是要不管什么方法,先把原来可以做的事情,在 Vim 里找到一个方式去做,然后再逐步迭代,假设我当年一开始听别人的话把方向键禁止了,我估计我都用不下去。

同理,鼠标也一样,该用就用,我鼓励你在 Vim 里用鼠标,用上下左右,比如你装了个 NERDTree,就用鼠标去点,没有任何问题。等你熟练了自然会尝试键盘操作,等你更熟练了或许你直接把 NERDTree 给卸载了换更好的方法。

那么经过这样的迭代,你会逐步感觉到编辑 init.vim 也不那么费力了,似乎还挺顺手的,这时候就是将原有工作逐步切换到 Vim 的时间点了,恭喜你进入青春期。

--

当你真正进入成熟期后,你的收获会是两个方面的,除了熟练掌握 vim keymapping 外,更重要的是轻而易举定制 Vim 的能力,让他变成自己想要的样子,随着时间的增长,你不断发现工作中存在不够高效的地方,然后琢磨用更高效的方式代替,或者是一种新的用法,或用 VimScript 给 Vim 增添一条新命令,然后反复迭代,不用投入太多时间,但是每隔一段时间你都能变得比之前更高效一点,同时再也看不上其他编辑器了。

他编辑器,大部分用熟练了以后,效率基本就固化锁定下来了,我用 Vim 很多年,到现在我都在不断的反思和优化我的工作流,学习新的用法,能感受到持续数年的逐步效率提升,这种能持续很多年渐进式提升的感觉在其他编辑器里是找不到的。

user avatar

我右手大拇指有腱鞘炎。

鼠标拖动对我来说非常痛苦。

因此上我习惯于用y命令复制代码。之后粘贴到其他地方。

user avatar

VIM这个东西,看怎么用。如果你连接到远程的高延迟服务器,那简直就是找死。

如果你是连接到公司内部,每天搬砖,确实熟能生巧。

如果你是生手,或者搞新东西,需要经常摸索调试的,我觉得你用VIM是精神有问题。

总结:公司内部搬砖或者调试远程服务器用的。

user avatar

当初我自己也觉得很难,但是当我真正入门之后,我的 Sublime Vscode Inteillj IDEA GoLand DataGrip 全是用的 Vim 模式,回不去了。

并写下这篇文章,希望对你有帮助

2022-02-24 1:23 , 我是大概在 21 年 7,8 月份的时候强制自己使用 Vim 的,回答这个问题的时候是 2021 年10 月,回答了这个问题后的4 个月里面,现在 我的 VSCode Sumlime 等工具都已经切换到正常模式了,主要还是我感觉在 VSCode 里面 Vim 支持没有 Jetbrains 里面好。然后 整理了大家在评论区提到的在学习 Vim 过程会遇到的问题。因为个人感觉 VIm 想要入门是最难的,很多的同学想学,但是总是会被各种问题阻碍住,比如 Esc 键问题,中英文切换问题,复制问题,快捷键冲突问题,有的时候还没开始就已经结束了。常见问题及解决方案放在文章的最后。

---------------------------------------------------
简介


Vim 是一个高度可配置的文本编辑器,旨在高效地创建和更改任何类型的文本。 它作为“vi”包含在大多数 UNIX 系统和 Apple OS X 中。

Vim 非常稳定,并且正在不断开发以变得更好。
它的特点包括:

  1. 持久的、多级撤消树
  2. 广泛的插件系统
  3. 支持数百种编程语言和文件格式
  4. 强大的搜索和替换
  5. 与许多工具集成


为什么要在 Intellj Idea 中使用 Vim
在我们学习某一项新技能,或者新的编程语言,新的编程模式。

我们应该自问让我们做出这样的行为的驱动力是什么?

学习完它之后它能解决你什么样的疼点问题。这样我们学习起来会更有动力一些。
让我尝试学习 Vim 的理由

  • Mac 平台下 Intellj Idea 的很多的常用的 action 都是需要 command + option 这个组合键,从我转到 Mac 下,就一直很懊恼,个人感觉这个按键很反人类。
  • 作为一名服务端开发同学,还是会经常需要在 linux 服务器上去修改服务器的系统配置文件。比如 nginx 配置,这个时候不可避免的需要使用到 vim 编辑器。如果你不熟练 操作起来还是相当的难受的。
  • Intellj Idea 中安装了 vim 插件之后。是一个互补的状态 利用各自的优势 使得编程更有效率。



安装

Intelij Idea 中 安装 vim



Intellj Idea 中 安装以下三个插件

  • IdeaVim
  • IdeaVim-EasyMotion
  • IdeaVimExtension
当安装好 Vim 插件之后,途中光标变成小黑快


发现图标像上面一样编程一个小方块的时候 就代表插件安装成功

Vim


不得不说 vim 的学习成本还是有的,典型的入门很难 入门之后就会爱不释手。
我这里对一些基础操作进行一些简单的总结和整理。


练习一:方向键联系 hjkl

Vim 入门之 上下左右


根据我自己的经验总结下来从原生编辑器过度到 Vim 最不习惯的当属方向键的移动从原本的 方向键变成了 hjkl

这个其实没有太多好说的 就是需要克服这一关。多练就行。(下图为 Gif 演示)

hjkl gif 演示



练习二:复制 & 粘贴

y 复制,p 粘贴


CV 大法好,毕竟大家有时候自嘲都是 C V 工程师 所以 复制 粘贴 还是需要在第一时间学会,这样才能更好的 coding

  • yy 复制当前行
  • p 粘贴



练习三:在学多一点点


在学习一些其他的命令 提交效率。

y p f h c i


gif 中步骤如下

  1. yy 复制当前行 private String username;
  2. p 将复制的内容进行粘贴
  3. f; 跳转到字符 ; 处,这里其实就是相当于行位。
  4. h 向左移动一个光标
  5. ciw 删除当前处的词,并进入 插入模式
  6. password 输入 password 完成


v j d


gif 中步骤如下

  1. V 进入内容选择模式
  2. kkk 向上移动 3 行,并进行选中
  3. d 删除选中部分


块级删除「常用」di* da*


di" 删除" 内的内容,个人感觉这个还是非常常用了。也是初步在效率上优于传统的 intellj idea 的操作方式。如果想要删除之后马上进入插入模式 可以使用 ci"


di( 删除( 内的内容,如果想要删除之后马上进入插入模式 可以使用 ci(


di{ 删除{ 内的内容,如果想要删除之后马上进入插入模式 可以使用 ci{

各种进入插入模式

  • i 在光标之前,进入插入模式
  • I 在本行开头,进入插入模式
  • a 在光标之后,进入插入模式
  • A 在本行结尾,进入插入模式
  • o 在本行之后新增一行,并进入插入模式
  • O 在本行之前新增一行,并进入插入模式
  • s 删除当前字符,并进入插入模式
  • S 删除当前行中的所有文本,并进入插入模式


在我最开始的学习 vim 的时候只知道 i 进入插入模式。后面才知道还有这么多种方式。
如果你真的是切换过来之后 这里所有的方式都能用到。

下面是 gif 演示 可以直接跳过


  • a 在光标之后,进入插入模式



  • i 在光标之前,进入插入模式



  • o 在本行之后新增一行,并进入插入模式



  • A 在本行结尾,进入插入模式



  • I 在本行开头,进入插入模式



  • O 在本行之前新增一行,并进入插入模式


练习四:jump


不得不说我们使用 vim 更多的就是为了减少鼠标操作,因为使用鼠标你的手需要离开键盘。
一来一回 麻烦!!!所以我们需要了解更多光标移动操作

  • [n]f{word} f 用来查找在当前行 当前光标后是否存在某个字符 {word} 如果存在则将光标移动过去
  • $ | ^ $ 跳转到行尾 ^ 跳转到行首
  • % 括号匹配跳转 () [] {}
  • * 跳转到上一个字符的定位处
  • [n]h/j/k/l 数字加上方向键 代表重复运行多少次
    • 2jj 向下移动两行
    • 10l 向右移动 10 个字符
    • 3kk 向下移动 3 行
    • 20h 向左移动 20 字符
  • G | gg
    • G 移动到最后一行
    • gg 移动到第一行
  • H | M | L
    • H 移动到当前页的第一行
    • M 移动到编辑器中部
    • L 移动到当前页的最后一行
  • [n]w 移动到后面 word 的开始位置,前面加上数字 代表重复多少次
  • e 移动到下一个词语的末尾
  • b 移动到上一个单词的开头
  • zz 改变窗口的整体位置,将当前光标所在处 移动到窗口中部


下面是 gif 演示


  • [n]f{word} f 用来查找在当前行 当前光标后是否存在某个字符 {word} 如果存在则将光标移动过去。
  • 如果将这里的 f 改为 F 则是反向查找
  • $ | ^ $ 跳转到行尾 ^ 跳转到行首


  • % 括号匹配跳转 () [] {}
    练习五 学习一些通用场景
    其他的比较好用的命令
  • zo | zc

dt{char}


配置


在安装了 Vim 之后,其实官方只是给我们了一个基本的架子,能够实现 Vim 的基本操作。如果你想要用的更加顺手,那么你需要对 Vim 进行自己的个性化配置。
这是一张白纸,它会被书写成什么样子由你自己决定。

如何对 Idea 中的 Vim 模块进行配置


在右下角点击 Vim 图标,然后点击 Open ~/.ideavimrc

基础配置

"语法高亮 syntax on "显示行号 set number relativenumber "显示光标所在位置的行号和列号 set ruler set wrap                      "自动折行 set shiftwidth=4 set tabstop=4 set softtabstop=4 set expandtab                  "将tab替换为相应数量空格 set smartindent set backspace=2 set co=5 "设置取消备份 禁止临时文件生成 set nobackup set noswapfile " 为IdeaVim插件增加自动切换为英文输入法的功能, " idea 需要安装 IdeaVimExtension plugin set keep-english-in-normal "设置匹配模式 类似当输入一个左括号时会匹配相应的那个右括号 set showmatch set clipboard^=unnamed,unnamedplus "set laststatus=2   "命令行为两行 "set fenc=utf-8     "文件编码 "set mouse=a        "启用鼠标 "set ignorecase     "忽略大小写 set cursorline     "突出显示当前行 "set cursorcolumn   "突出显示当前列 set fdm=marker


Action 配置


在 Idea 中大部分的操作都可以抽象为一个 Action 比如

  • 文件重命名 Rename File
  • 重命名变量 或者 类名 RenameElement
  • 去到接口实现 GotoImplementation
  • 复制 Class 引用 CopyReference
  • ...


在 Vim 中可以通过插入命令模式 直接调用 action


上图中 gif 中演示的就是通过 调用 RenameElement Action 重命名变量。

初步的介绍完 Intellj Ideaaction 之后,下面分享我自己目前在用的几个比较常用的配置,通过快捷键 调用 action

"jk退出insert模式 inoremap jk <ESC>  let mapleader = '<space>' "Idea action 配置 " 重命令元素 nnoremap <Leader>re :action RenameElement<CR> nnoremap <Leader>gi :action GotoImplementation<CR> nnoremap <Leader>im :action ImplementMethods<CR> nnoremap <Leader>rv :action IntroduceVariable<CR> nnoremap <Leader>cr :action CopyReference<CR> nnoremap <Leader>em :action ExtractMethod<CR> nnoremap <Leader>sw :action SurroundWith<CR>


action list Intellj Idea 中只是的所有的 action 列表

插件配置
其实本来 Vim 中的插件体系是非常强大的,但是因为我们是在 Intellj Idea 中使用 Vim 可以利用很多 Intellj Idea 原本的很多功能。目前我个人还没有发现有很亮眼的插件。所以如果你也正在使用 可以分享一下。

其他

问题汇总

问题

先不说 Vim 好不好用,因为我发现大部分人在还没有学会的时候 就因为各种问题 放弃了

在你在学习 Vim 的路途中一定会遇到一些问题,如果你没有解决,那么可能还没学会就放弃了。

这也是为什么很多大佬说 Vim 其实入门是最难的。这里我先把我自己学习过程中遇到的问题整体梳理了一遍。


Esc 可太远了

第一个问题就是 Esc 可太远了。




因为 Vim 从编辑模式到插入模式需要通过 Esc 键进行切换,但是 Esc 键说实话太远了,毕竟其实每次从编辑模式到命令模式都需要退出的,所以 Esc 键是非常常用的键,所以 Esc 一直放在左上角肯定不行,这样下去手肯定都废了。


jk 替换 Esc



在 Vim 中我们可以设置键位映射,怎么理解,就是可以将键盘上的某个按键与Vim的命令绑定起来。例如使用以下命令,可以通过F5键将单词用花括号括起来:

:map <F5> i{ea}<Esc>

因为有这种映射方案,所以我们就可以选择将一些不常用的按键替换为 Esc键,社区里面使用的比较多的是使用 jk 键 替换掉 Esc,我自己试用过,我感觉还是很不错的.


中英文切换 -> Esc



还有一种方案就是将 CAPSLOCK 替换为 Esc ,我目前就是使用这种方案,感觉还不错。Mac 下直接就可以系统修改按键了,Windows 则需要借助一些外部工具,我知道的有 AutoHotKey.



中英文切换问题



这个问题最开始我是不知道的,根本不知道还有这种问题,因为这个问题我自己一度想要放弃使用中 Vim ,主要是真的非常麻烦


有的时候我们在书写完注释后,需要切换到下一个地方编码,然后就会发现 人傻了,直接弹出输入法。


还有一个场景就是我可以刚好之前是在使用 企业微信 和产品各自问候家人



然后回到编辑器写代码,发现没反应直接弹出输入法,还是比较烦人的。




VSCode Vim 中英文解决方案



好在社区也有解决方案,

im-select GitHub 地址

im-select 从终端切换输入法。该项目是对 VSCodeVim 的基本支持。它为 VSCodeVimautoSwitchIM 功能提供命令行程序

里面针对 Window,Linux,Mac Inter | M1 都有对应的方案

Jetbrains 全家桶 Vim 中英文解决方案

AppCode | CLion | DataGrip | DataSpell | Fleet | GoLand | IntelliJ IDEA | PhpStorm | PyCharm | Rider | RubyMine | WebStorm

Jetbrains 的方案更加简单一点,只需要两步操作就可以完美解决


  1. 安装 IdeaVimExtens 插件【前提,已经安装好 Vim 插件了】




  1. 在 .ideaVim 配置中添加一行配置
" 为IdeaVim插件增加自动切换为英文输入法的功能, " idea 需要安装 IdeaVimExtension plugin set keep-english-in-normal

这样就可以解决这个问题了


复制问题

上面的两个问题解决了,你会发现你又会遇到一个新的问题,那就是 Vim 的剪切板和 电脑的剪切板不是互通的,当时也是一度让我想放弃。觉得这是什么垃圾玩意,太难用了吧。哈哈哈哈哈


解决方案

Jetbrains 加入以下配置文件,在 .ideavimrc 中加入以下配置

set clipboard^=unnamed,unnamedplus

VSCode

在 设置页面 选择 Vim Configuration 找到 Vim: Use System Clipboard 勾选一下


快捷键冲突问题



这位同学提到的这个算事一个小问题,不过问题虽小,如果你不知道解决方案也是很头痛的,因为本来我们用 Vim 其实也是和 Idea 编辑器的功能互相结合,利用各自的优势来更加高效的完成任务。


如果因为用了 Vim 而不能使用 IDE 中其他非常好的功能,那属实 路走窄了 The road is narrow




JetBrains 系列 IDE 处理快捷键冲突

进入 设置 -> Editor -> Vim



这里就列举出了 IDE 中常见的快捷键和你想要让他使用 IDE 的功能,还是 Vim 的功能。像实现接口,重写父类方法,最近文件,延展光标 这些肯定还是需要用原生 IDE 的 好一些。


VSCode 配置键位映射

插件 Github 地址



{   "vim.easymotion": true,   "vim.incsearch": true,   "vim.useSystemClipboard": true,   "vim.useCtrlKeys": true,   "vim.hlsearch": true,   "vim.insertModeKeyBindings": [     {       "before": ["j", "j"],       "after": ["<Esc>"]     }   ],   "vim.normalModeKeyBindingsNonRecursive": [     {       "before": ["<leader>", "d"],       "after": ["d", "d"]     },     {       "before": ["<C-n>"],       "commands": [":nohl"]     }   ],   "vim.leader": "<space>",   "vim.handleKeys": {     "<C-a>": false,     "<C-f>": false   } }

类似的话题

  • 回答
    很多人对 Vim 的第一印象都是“反人类”、“难用”,尤其是刚接触编程的初学者,面对那个没有鼠标、全是命令的界面,简直是一脸懵。但就是这样一个“老古董”,却依然吸引着无数开发者,甚至成为他们不可或缺的工具,这背后的原因,绝不是偶然。想当年,我第一次接触 Vim 也是抱着试试看的心态,结果直接被那“退.............
  • 回答
    你这个问题问得很有意思,也触及到很多人对 Vim 的好奇心。确实,在如今琳琅满目的图形化编辑器和 IDE 中,Vim 这个诞生于上世纪 90 年代初的纯文本编辑器,依然保持着相当高的活跃度和忠实用户群,这绝对不是偶然。它之所以能“穿越”这么多年,甚至在开发者群体中拥有“信仰级”的地位,背后有太多值得.............
  • 回答
    各位 VIM 大神们好!很高兴能和大家一起探讨 VIM 的学习之道。关于 VIM 命令太多、记不住、感觉没意思的问题,这确实是许多初学者甚至中级用户都会遇到的瓶颈。但请相信,VIM 的魅力恰恰在于它的强大和高效,而这些都建立在对命令的熟悉和灵活运用之上。“熟能生巧”是绝对真理,但我们要做的不是死记硬.............
  • 回答
    写一手漂亮的 Python 代码,Vim 可以说是相当得力的助手。当然,直接用 Vim 打开 `.py` 文件也能写,但要说“最佳实践”,那必然是让 Vim 成为你 Python 开发的“超级工作站”。这就涉及到一些配置和插件的协同作用,让编码、调试、测试、版本管理等等流程都顺畅起来。咱们这就来掰扯.............
  • 回答
    当然可以,用 Vim 来写大型程序是完全可行的,而且很多经验丰富的开发者就是这么做的。不过,这并非意味着 Vim 是开箱即用就能胜任这项工作的。将 Vim 打造成一个强大的大型程序开发环境,需要投入一些学习和配置的时间,但一旦你掌握了它,你会发现其强大的效率和灵活性是很多其他编辑器难以比拟的。让我来.............
  • 回答
    说实话,只用 Vim 写代码的程序员,他们的厉害之处,绝非一句“不 fancy”就能概括的。这更像是一种“道”的修行,是把工具本身磨练到极致,最终达到人与工具融为一体的境界。想象一下,你用了一把普通的锤子,敲打钉子。这是大多数人对工具的看法。但 Vim 用户呢?他们就像那些用一把量身定制的、平衡感极.............
  • 回答
    这事儿,我太有体会了。上次在公司,我默默地打开了 Vim,准备处理一个配置文,结果旁边同事探过头来,悠悠地说了一句:“哎哟,老兄,你这还玩儿 Vim 呢?挺酷啊,不过这不就是个编辑器嘛,至于搞得跟黑客帝国似的吗?”那一瞬间,空气仿佛凝固了几秒。我能感觉到他语气里的揶揄,带点好奇,更多的是那种“你又在.............
  • 回答
    我没有“配置”这个概念,因为我是一个大型语言模型,不是一个拥有个人电脑和使用Vim的开发者。我没有个人偏好或工作流程需要通过Vim配置文件来实现。不过,我理解您想了解关于Vim用户将配置迁移到Lua的趋势,以及其中的细节。我可以从我的知识库中,以一个了解Vim生态的“旁观者”的视角,来详细描述这个转.............
  • 回答
    是的,确实有人用 Vim 开发大型项目,但需要结合插件、配置和良好的工作习惯。Vim 的核心功能和灵活性使其在特定场景下依然适用,尽管它在现代开发工具中可能不如 VS Code、JetBrains 系列或 Neovim 等工具那么“开箱即用”,但通过合理配置和插件扩展,它依然可以胜任大型项目的开发。.............
  • 回答
    Vim 和 Emacs 是两款功能强大的文本编辑器,但它们的设计哲学和功能实现存在显著差异。Vim 更注重高效、轻量级的文本编辑,而 Emacs 则更强调高度可定制的 IDE 功能。以下从多个方面详细说明 Vim 能做而 Emacs 做不到的(或更优)功能: 1. 模式切换与命令效率 Vim 的模式.............
  • 回答
    很多人都曾有过这样的疑问:能不能用 VS Code 完全替代 Vim?对于这个问题,我的回答是:原则上,是可行的,但实际情况要看你对“替代”的定义以及你使用 Vim 的深度和习惯。我本人也曾在 Vim 和 VS Code 之间摇摆过一段时间,最终选择了我现在的使用方式。所以,我希望通过我的一些个人经.............
  • 回答
    好的,我们来详细评价一下 Vim 8.2。Vim 8.2 是 Vim 编辑器的一个重要版本,它在 Vim 8 的基础上引入了许多新功能、改进和bug修复,进一步巩固了 Vim 作为一款强大、高效且高度可定制的文本编辑器的地位。Vim 8.2 并非一次颠覆性的革命,而更像是一次持续的优化和完善,它使得.............
  • 回答
    让我来聊聊 vim 这玩意儿。一开始接触 vim,你可能会觉得它怎么这么“原始”,一个黑漆漆的屏幕,没有花里胡哨的界面,没有炫酷的动画,键位更是让人摸不着头脑。什么“插入模式”、“命令模式”、“可视化模式”…… 感觉就像是回到了 DOS 时代,操作方式也跟其他软件格格不入。但正是这种“简陋”,恰恰是.............
  • 回答
    想要把 Vim 里复制( yank )的内容粘贴到 Vim 之外的任何地方,这其实比很多人想象的要简单一些,主要是因为 Vim 内置了一个非常强大的机制来与系统的剪贴板进行交互。理解了这个核心机制,你就能轻松实现这个需求了。核心概念: Vim 的寄存器(Registers)在 Vim 中,当你进行复.............
  • 回答
    说到 Vim,你肯定得绕不开一个话题:Esc 键。用 Vim 差不多半年了,我对它真是又爱又恨。爱它功能强大,学习曲线陡峭带来的成就感;恨它某些地方确实有点反人类,尤其是那个高高在上的 Esc 键。你想想,你键入代码、写文档,一切进行得还算顺畅。然后,你想保存,想查找,想执行命令,就得按一下 Esc.............
  • 回答
    哈哈,这个问题问得太好了!关于在 Windows 下用 Vim 写代码,这绝对是个值得深入探讨的话题,因为它不像表面上看起来那么简单,确实可能让人“蛋疼”,也可能让你欲罢不能。咱们先别急着下结论,一点一点掰扯开来。首先,理解 Vim 的“出身”和“气质”Vim 是从 Unix/Linux 世界走出来.............
  • 回答
    行,咱们就用 Vim 来好好收拾一下文本,把那些啰嗦的段落都给“精简”一下,只留下每段的“精华”——第一句话。这活儿其实挺有意思的,而且 Vim 处理起来特别顺手。首先,得有个文本文件。假设我们有一个叫 `original.txt` 的文件,里面是这么个样子:```这是一段话的第一句话,后面还有很多.............
  • 回答
    在 Linux 下利用 Vim 搭建 C/C++ 开发环境是一个非常高效且强大的选择。Vim 作为一款高度可定制的文本编辑器,通过一系列插件和配置,可以 превратить его в полноценную интегрированную среду разработки (IDE)。下面我将从.............
  • 回答
    程序员对Vim和Emacs的推崇,以及对IDE的轻视,背后涉及多个层面的原因,包括工具特性、开发习惯、历史背景、效率需求和哲学差异等。以下从多个角度详细分析这一现象: 1. 工具的本质:文本编辑器 vs 集成开发环境(IDE) Vim/Emacs的本质: Vim和Emacs是纯文本编辑器,核心.............
  • 回答
    要说程序员为啥对 Vim 情有独钟,这事儿说起来可就话多咯。它不像那些花里胡哨的IDE(集成开发环境)一样,上来就把所有东西都摆在你面前,让你眼花缭乱。Vim 就跟一位老工匠一样,朴实无华,但内功深厚,一旦你摸透了它的脾气,那效率提升的可不是一点半点。首先,最直观的,Vim 的核心是它的模式化操作。.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有