V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
975779964
V2EX  ›  Vim

vim 编辑中文太痛苦了!

  •  1
     
  •   975779964 · 2019-12-05 09:17:21 +08:00 · 12477 次点击
    这是一个创建于 1817 天前的主题,其中的信息可能已经有所发展或是发生改变。

    中文没有空格,e w b t T f F 跳转全都没有用。

    只能老老实实 hjkl 移动 光标,想要改某个词组,不小心按了 e,直接跳到句子末尾去了!

    搜索了 github ,vim chinese 全都是教程或者 是输入法,难道没有人在意这个问题么?

    第 1 条附言  ·  2019-12-05 19:18:41 +08:00
    是我描述 有问题……好多人都注意到输入法上面了……我先说下我的使用场景吧……
    我使用 的是 win10 ,然后用的是 gvim,主要是编辑 markdown 文档( gvim 配插件)和处理小说文本之类( vim g 命令)的
    输入法的问题 gvim 当你在 insert 模式下输入 中文,然后 按 esc ,gvim 自动就帮你弄成英语了。所以输入法的问题在 gvim 下不是问题。
    我主要的问题是楼下所说的分词。如 图 我发不了图…… 我发个 连接吧…… https://user-images.githubusercontent.com/10111/35366479-2406fc80-01bd-11e8-8b72-04f1cd5838b1.gif

    或者你们在浏览器输入框上面 输入这段话 ,当你们按 ctrl+左右 方向键试试 。他就相当于是 vim 的 e 和 b 的功能,但是 在 vim 里面 就不行了,我想要的就是 当你在 vim 里面 按 v b e 的时候 ,光标能根据词组跳转 而不是 按 e 光标直接就跳到 中文句子末尾了。
    还有 按 f t 的时候最好能根据 中文的首字母 来 跳转,不然 f t 功能 在 中文编辑 一点作用都没有……

    这些痛点,想必不是我 一个人有吧, 你们有这些痛点,但是却让我 换一个编辑器…… 我是很喜欢 vim 的这个操作方式,所以不要 让我 换别 的编辑器呀…… 能推荐 给我 一个插件 解决这些 问题就行呀……
    第 2 条附言  ·  2019-12-05 20:14:34 +08:00
    https://github.com/fxsjy/jieba
    我在 github 上面 找到 了一个叫 结巴 中文 分词的 插件 ,但他是 python 写的,不知道有没有厉害 的 vim 大佬 能把他整合到 vim 里面 去……
    70 条回复    2022-05-02 19:21:12 +08:00
    wd
        1
    wd  
       2019-12-05 09:25:11 +08:00 via iPhone
    https://github.com/cute-jumper/ace-pinyin/blob/master/README.org emacs 有一个...要不换 emacs 用 evil...
    littleylv
        2
    littleylv  
       2019-12-05 09:25:45 +08:00
    额,你为什么要在 vim 上编辑中文?
    一般最多也就是代码里掺杂的中文注释这完全可以接受。
    你该不会是全篇中文文章吧???
    dppd
        3
    dppd  
       2019-12-05 09:26:14 +08:00
    你安装的时候选择中文就好了
    luozic
        4
    luozic  
       2019-12-05 09:27:51 +08:00 via iPhone
    写文章 还是写 markdown ?
    dreamerlv3ex
        5
    dreamerlv3ex  
       2019-12-05 09:32:46 +08:00
    centos vim 7.4

    搜索了 github ,vim chinese 全都是教程或者 是输入法,难道没有人在意这个问题么?
    光标在'搜'字符上
    按下 e 位于'了'
    按下 e 位于'b'
    按下 e 位于','
    按下 e 位于'm'
    按下 e 位于'e'
    按下 e 位于'者'
    按下 e 位于'法'
    按下 e 位于','
    按下 e 位于'么'
    按下 e 位于'?'

    楼主描述的是这样?
    hanxiV2EX
        6
    hanxiV2EX  
       2019-12-05 09:35:15 +08:00
    fcitx 可以设置命令模式自动切换到英文状态。
    jinliming2
        7
    jinliming2  
       2019-12-05 09:43:23 +08:00 via iPhone
    因为中文这种语言的词组很大程度上是看上下文的,你可以了解一下中文分词的基本问题,要准确分词还要看概率频率之类的……

    给一个简单的解决方案:用宏,固定往后跑 2 个字符,这样估计会好用一些……
    telnetning
        8
    telnetning  
       2019-12-05 09:43:34 +08:00
    不少人在某个阶段应该都在意过这个问题,所以有了 vimim,可以一定程度上解决这个问题。
    但是可能一段时间后,大家发现了,为啥我要在 vim 里写中文折磨自己呢,或者形成了自己的编辑惯性,也就不再折腾这种了吧。
    我也是曾经折腾过 vimim,主要是想用 vim 写 markdown,后来明白了,没必要折腾自己,vim 老老实实写代码,markdown 老老实实用各种好用的 md 编辑器就完事了。
    Tumblr
        9
    Tumblr  
       2019-12-05 09:47:34 +08:00
    所以我的代码里习惯用英文写注释。。。
    意外之喜就是,我带的一批人现在的英语词汇量增加了,同时并不那么排斥英文资料了(微软系资料为主,平时就是丢个 en-us 的链接)。以前他们会第一时间用网页翻译,现在对于一些比较短的文章,可以直接看了。
    iCyMind
        10
    iCyMind  
       2019-12-05 09:53:44 +08:00
    没办法, 不支持实时的中文分词.

    不过至少你还可以用 jkhl 定位, 比英文定位慢, 但至少比鼠标快把?
    jdhao
        11
    jdhao  
       2019-12-05 09:54:35 +08:00
    不在 Vim 里使用中文,一般都是用英文
    iCyMind
        12
    iCyMind  
       2019-12-05 09:54:54 +08:00
    不仅你搜到的都是输入法, 甚至你的帖子的回复也有一大部分的输入法, 哈哈哈太讽刺了
    jinliming2
        13
    jinliming2  
       2019-12-05 09:55:52 +08:00
    或者自己数字符,比如往右跳 5 个字,就按 5l,往左跳 7 个字,就按 7h 之类的
    poplar50
        14
    poplar50  
       2019-12-05 10:01:33 +08:00 via Android
    hjkl 也可以 100h 100k 这么用。上下加个 g,基本也还行。
    klaas
        15
    klaas  
       2019-12-05 10:04:39 +08:00
    我还以为只有我有这种烦恼呢
    henices
        16
    henices  
       2019-12-05 10:12:51 +08:00
    为啥不用 markdown 呢,vim 写代码用啊,VNote vim mode 真不错。
    season4675
        17
    season4675  
       2019-12-05 10:13:46 +08:00
    我就一个问题……为啥要写中文……
    iCyMind
        18
    iCyMind  
       2019-12-05 10:25:10 +08:00
    @henices VNote vim mode 支持中文的分词?
    LuffyWong
        19
    LuffyWong  
       2019-12-05 10:34:07 +08:00
    简直不能更痛苦, 写中文就是要中英文切换, 再加上 vim 的模式切换 贼烦
    scriptB0y
        20
    scriptB0y  
       2019-12-05 10:40:56 +08:00
    是的。。。我想一切东西都在 Vim 中写,就中文一直蛋疼
    xpfd
        21
    xpfd  
       2019-12-05 10:55:08 +08:00
    你为啥要用屠龙刀雕豆腐花?
    ysn2233
        22
    ysn2233  
       2019-12-05 11:01:49 +08:00
    不只是 vim,我其他所有能用 vim 模式的编辑器全开了 vim 模式,所以写中文都蛋疼,只能用 vimim 勉强解决一下。
    jingcoco
        23
    jingcoco  
       2019-12-05 11:48:06 +08:00
    你可以用 vscode 远程开发
    sirius4gnu
        24
    sirius4gnu  
       2019-12-05 12:23:05 +08:00
    鉴于英语不行,vim 成功让我养成了不写注释的好习惯。
    Trim21
        25
    Trim21  
       2019-12-05 12:25:32 +08:00 via Android
    @jingcoco vscode 的中文分词支持也不太好…
    shenyuanlaolarou
        26
    shenyuanlaolarou  
       2019-12-05 12:41:58 +08:00 via iPhone
    mac 下有一个可以切换输入法的命令行工具,如果对 vimscript 熟悉的话可以自己写一个插件实现进入 normal 模式就切换到英文,如果不想自己写的话可以去 github 上搜 coc-imselect。这个插件可以实现这个功能,不过要装 coc.nvim。另外 vscode 和 jetbrains 系的 idea 的 vim keymapper 都实现了这个功能。
    Trim21
        27
    Trim21  
       2019-12-05 12:43:43 +08:00 via Android
    这个帖子里楼主说的是分词的问题,不是输入法切换的问题…
    ThomasZ
        28
    ThomasZ  
       2019-12-05 12:45:45 +08:00 via Android
    vim 治好了我中文注释的病。。。
    shenyuanlaolarou
        29
    shenyuanlaolarou  
       2019-12-05 12:47:06 +08:00 via iPhone
    @Trim21 额。。。理解错了
    shenyuanlaolarou
        30
    shenyuanlaolarou  
       2019-12-05 12:47:48 +08:00 via iPhone
    @shenyuanlaolarou 理解错了,请忽略
    agagega
        31
    agagega  
       2019-12-05 12:48:00 +08:00 via iPhone
    我记得 mac 系统好像自带中文分词
    silenceeeee
        32
    silenceeeee  
       2019-12-05 13:45:41 +08:00
    搭车问一下,用 VIM 写代码时,如何快速复制从当前位置往前十几行的某个单词到当前光标所在处啊。感觉怎么都达不到鼠标复制的速度。
    poisedflw
        33
    poisedflw  
       2019-12-05 13:51:26 +08:00
    @silenceeeee 按整行,按区块。或者借助标记位置(各种括号、引号、尖括号)删除内部的东西。
    silenceeeee
        34
    silenceeeee  
       2019-12-05 14:10:23 +08:00
    @poisedflw 我说的是复制,基本上我就是先看一下 relativenumber 然后 nk,然后要么是 easymotion 的 <leader> fs 或者是 fs (这里假设 s 是我需要复制的字符串的首字母)一顿操作才能复制到它。不知道有没有更好的方法,感觉这样好慢啊。
    thinker3
        35
    thinker3  
       2019-12-05 14:24:15 +08:00
    我为此写了一个小小的 swift 程序,按 esc 退出中文输入法
    fps23dot9999
        36
    fps23dot9999  
       2019-12-05 14:43:10 +08:00
    @silenceeeee ), }, ]}, ]], vib, vi], vi}
    :help text-objects
    silenceeeee
        37
    silenceeeee  
       2019-12-05 14:45:55 +08:00
    @fps23dot9999 sorry, 我估计是我表达有误,我说的场景是:当前光标在 100 行,在第 70 行的位置有一个我需要的字符串,我想将这个字符串复制到 100 行来
    tomychen
        38
    tomychen  
       2019-12-05 14:50:11 +08:00
    @silenceeeee
    CTRL+F CTRL+B
    CTRL+D CTRL+U
    Chry3anthemum
        39
    Chry3anthemum  
       2019-12-05 14:53:11 +08:00
    @silenceeeee #37 原文:“@fps23dot9999 sorry, 我估计是我表达有误,我说的场景是:当前光标在 100 行,在第 70 行的位置有一个我需要的字符串,我想将这个字符串复制到 100 行来”
    ======
    回复:
    esc
    :70 或 30k 或 30<up>
    w 到字符串头,v,e 到字符串尾 或 t<某字符>到字符串头,v,t<某字符>到字符串尾
    y
    esc
    :100 或 30j 或 30<down>
    p
    ibeta
        40
    ibeta  
       2019-12-05 14:55:46 +08:00
    以前也是深受其苦,现在好多了
    主要就是我需要随时知道当前输入法是什么,并且可以快速切换到我想要的输入法
    说一下我的方案
    1. 使用 https://www.v2ex.com/t/565667 里面的方法 使用 left-command 切换到英文,right-command 切换成中文
    2. 使用 https://github.com/pqrs-org/ShowyEdge 当前输入法是中文的时候,在左上角显示个红色方块
    quietnight
        41
    quietnight  
       2019-12-05 15:10:07 +08:00   ❤️ 1
    emacs 写 latex 跟写小说一样流畅
    silenceeeee
        42
    silenceeeee  
       2019-12-05 15:12:02 +08:00
    @Chry3anthemum 我现在就是这么操作的,用 w,e,t,b 进行定位,感觉超级慢。不如鼠标一下就能精确定位,比较苦恼这个问题。
    waruqi
        43
    waruqi  
       2019-12-05 15:17:57 +08:00 via Android
    还好吧 我平常写文章也是 vim 没感觉出来有啥区别
    975779964
        44
    975779964  
    OP
       2019-12-05 19:20:18 +08:00
    @wd 谢谢你 也有人推荐我用 emacs 了,我现在 vim 都还没学习好呢。我买了本 vim 实用技巧的书。等我把 vim 学习好了,在去看看
    975779964
        45
    975779964  
    OP
       2019-12-05 19:21:21 +08:00
    @littleylv 为什么不能在 vim 下编辑中文啊,我很喜欢 vim 的这种 操作 方式 ,想 更快 的编辑 中文 呀……
    975779964
        46
    975779964  
    OP
       2019-12-05 19:22:58 +08:00
    @dreamerlv3ex 对对对,就是 按照 词组 跳转, 现在的 vim 你在中文下 按 e b 他直接 就按句子 跳转 了,除非 中文句子中间 夹杂 英语 。这样你 修改 某个中文 词组的时候 一点 都不好定位,非常恼火……
    975779964
        47
    975779964  
    OP
       2019-12-05 19:23:26 +08:00
    @hanxiV2EX 不是输入法的问题呀 …… 我描述 有点问题……我改了下……
    975779964
        48
    975779964  
    OP
       2019-12-05 19:24:55 +08:00
    @jinliming2 这是个妥协的方案 …… 但是你在浏览器 下 输入 中文 句子 按 ctrl+-> 或者 ctrl+ <- 方向键,你会发现他会根据 中文 的词组来的呀…… 为什么 vim 连 这样 的功能 都不支持 呢?
    975779964
        49
    975779964  
    OP
       2019-12-05 19:26:14 +08:00
    @Tumblr 也不是写代码呀…… ,我很喜欢 vim 的操作方式 ,想把他带进中文 编辑 ……唉
    975779964
        50
    975779964  
    OP
       2019-12-05 19:27:40 +08:00
    @iCyMind em …… 这样比的话 是的,但是没有更好 的解决方法 或者 插件 么?现在的问题是 github 上面我搜索不到(可能我用不好 github 搜索) 。大家 或多或少 都有这个问题吧, 但是 看 大家 都忽略了这个问题……
    975779964
        51
    975779964  
    OP
       2019-12-05 19:28:46 +08:00
    @iCyMind 可能也是我描述 有问题,我在 win 下用 gvim 输入法他会自动 切换 的(当你按 esc 的时候) ,这个对我来说不是问题呀…… 可能对他们来说 用 linux 或者 别的系统 可能是问题吧……
    975779964
        52
    975779964  
    OP
       2019-12-05 19:29:19 +08:00
    @jinliming2 这样 还不如用鼠标 呢…… 我想 应该有更好 的解决方法 ……
    975779964
        53
    975779964  
    OP
       2019-12-05 19:30:42 +08:00
    @klaas 咱俩 都有这个问题呀,希望能有个 vim 大佬 看到 这个需求 ,写一个插件 来解决 我们的痛点!而不是说 唉呀,vim 中文 分词 支持 不好,你们 别用 vim 编辑 中文 了!
    975779964
        54
    975779964  
    OP
       2019-12-05 19:31:55 +08:00
    @season4675 使用 vim 也不一定是写代码 的啊,我是看 善用佳软的文章 入的 vim 坑, 他也可以 披处理 文字 之类 的
    975779964
        55
    975779964  
    OP
       2019-12-05 19:34:04 +08:00
    @agagega 不止 mac ,win10 好像 也是这样的 支持 中文 分词的 ,但是 vim 就不支持……
    975779964
        56
    975779964  
    OP
       2019-12-05 19:35:11 +08:00
    @Trim21 对对对,我 追加了一下描述 ,里面 有一个 gif 的图,大佬 可以看一下……
    975779964
        57
    975779964  
    OP
       2019-12-05 19:36:31 +08:00
    @waruqi 你看着 e b w f t 这些好用 的光标移动 在中文 下 全都 废了 ,然后 只能用 hjkl 一点一点的移动 光标……这样能忍呀?
    Jirajine
        58
    Jirajine  
       2019-12-05 20:45:09 +08:00 via Android
    vim 支持 Python 的,你可以用那个中文分词库开发个 vim 插件。
    stanjia
        59
    stanjia  
       2019-12-06 09:23:30 +08:00
    Vim 中写中文有什么问题么???
    cursorzz
        60
    cursorzz  
       2019-12-06 10:47:25 +08:00
    挺好奇截图里面那个日文是怎么做到的
    njutree
        61
    njutree  
       2019-12-06 10:55:53 +08:00
    其实我倒一直有个问题就是 vim 遇到驼峰的英文不能跳很难受,不知道有没有插件可以支持。eg. RuleNameInterval 在 'R' 位置按 w 可以调到 'N'
    skyrem
        62
    skyrem  
       2019-12-06 13:15:29 +08:00
    我猜测 vim 本质上是根据空格来区分英文词组的,这很容易做到,日文的分词也仅限于中文字符和假名之间
    f 键可以定位字符位置,中英文都可以,但中文这么做操作很繁琐
    如楼上有人提到的,中文的分词是考虑上下文的,你搜到的结巴那么你可以看下结巴的示例句子
    要想集成中文分词功能我觉得是挺不容易的一件事
    现阶段也许小红点是个不错的替代方案
    RemiliaForever
        63
    RemiliaForever  
       2019-12-06 13:17:52 +08:00
    @njutree chaoren/vim-wordmotion
    jdhao
        64
    jdhao  
       2019-12-07 16:02:27 +08:00
    @silenceeeee 如果是当前 buffer 的单词,可以在 insert 模式输入 ctrl-x,ctrl-n 或 ctrl-x,ctrl-p,自动补全当前 buffer 的单词,详细参考 :h i_CTRL-X_CTRL-P
    silenceeeee
        65
    silenceeeee  
       2019-12-09 09:40:58 +08:00
    @jdhao 好的,我了解下。
    gbin
        66
    gbin  
       2020-05-09 12:21:45 +08:00
    @telnetning 看到头像还以为是我回复的。。。
    lazypanda
        67
    lazypanda  
       2021-11-24 23:41:59 +08:00
    别想了,别在 vim 中输入中文了,vim 不适合干这个,老老实实用 vim 写代码吧
    975779964
        68
    975779964  
    OP
       2021-11-25 09:36:14 +08:00
    @fighter9010 写代码注释,mardown 文档 这些都要中文输入啊……
    OrangeGege
        69
    OrangeGege  
       2022-05-02 15:06:37 +08:00
    原来不止我🈶️这个问题. 我已经妥协了. 写代码就用英文注释. 写 MD 文档,讲究着使用 hjkl 了
    975779964
        70
    975779964  
    OP
       2022-05-02 19:21:12 +08:00
    @OrangeGege 我现在是 用的 ideavim ,有个 插件 类似 easymotion 但是他支持 中文 ascii 跳转 的

    https://i.bmp.ovh/imgs/2022/05/02/79b5a501aaa16483.png

    支持中文首字母 ,并且 可以 连续 按键
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3231 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:10 · PVG 21:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.