一、vim的剪贴板支持

  有的vim版本不支持系统剪切板,也就是说在vim编辑器外面复制的内容,不能够粘贴到vim中;在vim中通过yy、d、c复制剪切的内容也不能粘贴在vim编辑器外面。

  这实在是有点奇怪,特别是对windows用户来来说。本来写东西就是复制粘贴,一个文本编辑器复制粘贴都做不到,那搞毛线啊~

  我们可以通过在终端输入命令来查看vim是否支持系统剪切板:

vim --version | grep clipboard

   终端会输出两行内容:需要关注是“clipboard”和“xterm_clipboard”前面的符号。如下图所示,两个条目前面都是+号(如下图所示),则vim支持系统剪切板,否则不支持。

  

  既然有的vim版本支持剪切板,有的版本不支持,那么是不是自己选择一个版本的源码自己编译安装就行了?折腾了一下,还是不行。

  简单说(不一定正确):图形界面的vim,即gvim,一般都支持系统剪切板;而没有图形用户界面的vim,很多不支持系统剪切板。

  既然如此,下载一个gvim就行了:

sudo aptitude install vim-gtk

  vim-gtk即一个发行版的gui vim。执行这条命令,本质是下载了一个gvim,但是同时也让vim能支持系统系统剪切板。

  换一句话说,安装一个gvim,多花了几十M的空间而已,不想用gvim,当它没被安装就好了。这种方式最简单直接。

二、 输入法的切换

(环境:mint21,vim8.2,输入法框架fcitx)

  使用vim的时候经常需要在不同的“模式”切换。有的说vim只有两种模式,普通模式和插入模式,这是简单的说法;其实vim的模式有七八种。

  其中最经常的就是在普通模式和插入模式间切换。当我们在插入模式切换到普通模式后,想通过按键k移动光标到上一行,如果当前是输入法是中文,我们需要按两次按键,即k+enter(或者shift+k),如果是英文输入状态下我们按下k,光标直接就移动了。所以,能不设置成这样:vim从插入模式切换到普通模式后,输入法同时自动切换到英文。

  网上有很多解决办法,大多不管用。不管用的原因是我们的系统有差别,我们的的输入法和vim的版本……也可能不同。

  想要达成在vim中自动切换输入法关键在于两点:

    (1):识别出vim中模式的转变。

    (2)根据(1)识别出来的结果调用软件切换输入法。

  vim自己会实时记录自己当前的模式,所以(1)很容易实现。关键在于第二点。

  我用的输入法框架是fcitx(不是fcitx5).在fcitx框架中,有一个方法可以查看和改变输入法。

$ fcitx-remote
1 # 执行fcitx-remote,能够获取当前的输入法,当前的输入法是1
$ fcitx-remote -o
$ fcitx-remote
2 # fcitx-remote -o ,将输入法改变成2
$ fcitx-remote -c
$ fcitx-remote
1 # citx-remote -c ,将输入法改变为1

  fcitx-remote是输入法框架fcitx下的一个程序,在目录(/etc/)下可以找到。不带参数调用它,返回当前输入法(1或者2);带参数-c调用,将输入法改为1(英文);带参数-o,将输入法该为2(中文).附带说一句,如果输入法框架是fcitx5,这这个程序名字是fcitx5-remote,也在这个目录。

  所以将下面的语句复制到"~ ./.vimrc"中理论上就能实现当:从插入模式切换到普通模式,输入法设置为英文。

 1 if exists('s:loaded')
2 finish
3 endif
4 let s:loaded = 1
5 let s:f_status = system("fcitx-remote")
6 let s:cmd = s:f_status == 1 || s:f_status == 2 ? "fcitx-remote" : "fcitx5-remote"
7
8 func! s:fcitx2en()
9 let l:lang = system(s:cmd)
10 if l:lang == 2
11 call system(printf("%s -c", s:cmd))
12 endif
13 endf
14
15 autocmd InsertLeave * call <SID>fcitx2en()

  实际上第一次使用这个脚本的时候,脚本只能在第一次切换到普通模式时自动切换输入法,而且还让我接下来不能通过shift按键切换输入法(输入法处于半卡死的状态)。

  许多人在做类似的尝试也碰到过类似的问题。

  如果代码很长,我可能会怀疑代码有问题,但是上面的代码很短,很简单,能够看出并没有问题。那问题出在哪里?

  我不知道问题出现在哪里,但是最终通过简单的输入法设置,解决了问题。

  打开输入法设置,将上面的红色方框中的快捷键设置为自己切换输入法时常用的按键。我习惯用两个shift进行输入法切换,所以就设置成上图这个样子。

  至于设置完后,为什么代码能够成功切换输入法,我也不是很明白。

  再说一句题外话:方框中的“切换激活/非激活输入法”这句话我倒现在也不明白什么意思~我开始以为是“切换输入法”的意思,现在我认为是“让输入法在激活和非激活两种状态之间切换”,即切换的不是输入法,而是输入法的激活状态。

  这种机器翻译的汉语,理解起来是真的费劲。

  前面的代码只是实现了从insert模式进入到normal模式后自动切换成英文的功能。类似的功能有一个需求没那么大的,那就是:进入insert模式的时候,将输入法自动切换回到上一次退出insert模式的输入状态。

  比如我们:(1)在insert模式中以中文状态进行编辑;(2)然后切换到normal模式移动光标;(3)再切换回到insert模式,希望输入法能自动回到(1)中的输入法状态。前面的代码只是实现了(1)--->(2)的输入法自动切换;但是不能做到(2)--->(3)的自动切换。

  查考下面:

1 https://github.com/lilydjwg/fcitx.vim/blob/fcitx5/plugin/fcitx.vim

  然后稍微修改一下:

 1 if exists('g:fcitx_auto')
2 finish
3 endif
4 let g:fcitx_auto = 1
5
6 let s:r_status = 1
7 let s:f_status = system("fcitx-remote")
8
9 "输入法框架是fcitx启用下句,不确定是fcitx还是fcitx5,启用下下句。
10 let s:cmd = s:f_status
11 "let s:cmd = s:f_status == 1 || s:f_status == 2 ? "fcitx-remote" : "fcitx5-remote"
12
13
14 function s:fcitx2en() "离开插入模式,自动改变输入法为英文,同时记录输入法状态
15 let l:lang = system(s:cmd)
16 if l:lang == 2
17 call system(printf("%s -c", s:cmd))
18 let s:r_status = 2
19 else
20 let s:r_status = 1
21 endif
22 endfunction
23
24 function s:fcitx2back() "进入插入模式的时候,切换回上一次插入模式时的输入法
25 if s:r_status == 1
26 call system("fcitx-remote -c")
27 else
28 call system("fcitx-remote -o")
29 endif
30 endfunction
31
32 autocmd InsertLeave * call <SID>fcitx2en()
33 autocmd InsertChange * call <SID>fcitx2back()

  

  

linux_mint_21 vim配置:剪贴板支持和输入法自动切换的更多相关文章

  1. Vim配置IDE开发环境

    我的vim IDE界面: 1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get instal ...

  2. 转载:Vim 配置入门

    转载:Vim 配置入门 原文地址:http://www.ruanyifeng.com/blog/2018/09/vimrc.html 作者: 阮一峰 Vim 是最重要的编辑器之一,主要有下面几个优点. ...

  3. spring集成mybatis配置多个数据源,通过aop自动切换

    spring集成mybatis,配置多个数据源并自动切换. spring-mybatis.xml如下: <?xml version="1.0" encoding=" ...

  4. WIN10环境下点击通知栏图标时自动切换输入法导致图标位置变动

    这个问题由来已久,每当点击系统右下角任务栏中的按钮时,原本是搜狗输入法就会自动变成“US [ 中文(简体,中国) ]”,图标会自动错位,导致响应的是其他功能. 假设上图是正常的环境,此时我点击电池图标 ...

  5. Linux --- vim 安装、支持python3的配置、插件自动补全YCM的安装配置及全过程错误总结

    1.git(用来下载vim和相关插件) sudo apt-get install git 2,cmake(用来编译clang-llvm) sudo apt-get install build-esse ...

  6. vim配置 高亮+自动缩进+行号+折叠+优化

    一:修改 .vimrc即可 二: set nocompatible " 关闭 vi 兼容模式syntax on " 自动语法高亮colorscheme molokai " ...

  7. 使用webpack从0搭建多入口网站脚手架,可复用导航栏/底部通栏/侧边栏,根据页面文件自动更改配置,支持ES6/Less

    之前只知道webpack很强大,但是一直没有深入学习过,这次从头看了一下教程,然后从0开始搭建了一个多入口网站的开发脚手架,期间遇到过很多问题,所以有心整理一下,希望能给大家一点帮助. 多HTML网站 ...

  8. VS Code - Vim 插件自动切换输入法

    前言: 在使用 Linux 的过程中,vim 是一个不错的编辑器,以至于多数人将其用成了习惯,在没有 vim 的环境下还是习惯用 vim 的快捷键来编辑文本.所以便有开发者们为众多的 IDE 和文本编 ...

  9. 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?

    使用Visual Studio写代码,经常遇到的一个问题就是切换中文输入法麻烦,输入完注释//,要切换到中文,输入完引号,要输入中文,然后还需要切换回来,有没有? 有时候中文输入法忽然失效有没有?明明 ...

  10. Env:VIM配置

    注:文章来自于http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393.html 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配 ...

随机推荐

  1. Yolov8离谱报错

    YoloV8离谱报错 ​ 今天下午给一个研究生小姐姐跑数据集,用的是yolov8在恒源云上租的4070的GPU服务器,跑垃圾分类数据集(https://blog.csdn.net/m0_5488250 ...

  2. 深度学习入门系列之doc

    这周老师让把深度学习的名词过一遍,小玛同学准备在过一遍Deep Learning名词的同时把基本的模型也过一遍. 感谢杰哥发我深度学习入门系列能让我有机会快速入门. 下面就来doc一些学到的东西 线性 ...

  3. 关于页面重定向https安全漏洞和服务器SSH加密算法漏洞

    1.HTTP 严格传输安全 nginx配置 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains ...

  4. 使用select需要注意的细节

    使用select需要注意的细节 在学校的时候就使用过select,但是在项目中使用的时候却犯了个错误. select如何使用就不进行总结了,网上教程太多,以下是项目中我写的一小段代码,便于总结. in ...

  5. [Pytorch框架] 2.1.3 神经网络包nn和优化器optm

    文章目录 PyTorch 基础 : 神经网络包nn和优化器optm 定义一个网络 损失函数 优化器 PyTorch 基础 : 神经网络包nn和优化器optm torch.nn是专门为神经网络设计的模块 ...

  6. 【解决方法】windos server 2019 在批量创建DNS的正向与反向记录时,提示报错: >Command failed: ERROR_ACCESS_DENIED 5 0x5

    目录-快速跳转 问题描述 原因分析: 解决方案: 附言: 问题描述 操作环境与场景: 在 VM 内 windos server 2019 在批量创建DNS的正向与反向记录时,提示报错: Command ...

  7. MD5简述及常见解密网址推荐

    什么是md5 MD5(Message-Digest Algorithm 5)(信息-摘要算法5), 一种被广泛使用的[密码散列函数](https://baike.baidu.com/item/密码散列 ...

  8. MySQL如何获取binlog的开始时间和结束时间

    MySQL数据库恢复到指定时间点时,我们必须通过MySQL全备+MySQL增量备份(可选)+MySQL的二进制日志(binlog)进行重放来恢复到指定时间点,实际的生产环境中,可能一段时间内生成了多个 ...

  9. Django-2:创建项目Project

    命令:django-admin startproject mysite PS C:\Users\liujun> cd e:\pyapp\cmdbPS E:\pyapp\cmdb> djan ...

  10. .Net8顶级技术:IR边界检查之IR解析(二)

    前言 IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦.但部分基本明了.本篇通过小例子了解下.前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解. 概括 1.前奏 先上C ...