一起来分享一些曾让你茅塞顿开的 Vim 命令 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
akring

一起来分享一些曾让你茅塞顿开的 Vim 命令

  •  4
     
  •   akring 2023 年 2 月 6 日 9277 次点击
    这是一个创建于 1173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我先抛个砖,想看看大家的分享:

    ciw (删除当前单词并进入编辑模式) ci{ (删除 {} 内的内容并进入编辑模式,同理可用于括号,双引号等,重写函数的时候非常好用) ctrl o (编辑模式下暂时切换到 normal 模式,可以执行一条非编辑模式下的命令) 
    92 条回复    2023-07-25 13:20:32 +08:00
    EyebrowsWhite
        1
    EyebrowsWhite  
       2023 年 2 月 6 日 via Android   11
    第二条的大括号可以用大写 B 代替,小括号可以用小写的 b 代替,按起来舒服些
    clecho
        2
    clecho  
       2023 年 2 月 6 日   2
    ciw 我还真不知道,不过看见过 viw ,vi{。作用是选中单词,用法和你上面举例一样
    yzld2002
        3
    yzld2002  
       2023 年 2 月 6 日
    @EyebrowsWhite #1 学到了,感谢!
    szyp /td>
        4
    szyp  
       2023 年 2 月 6 日   6
    :set paste 可以进入不丢失缩进的粘贴模式
    nba2k9
        5
    nba2k9  
       2023 年 2 月 6 日
    :q! :wq
    记住这两个,别的什么都好说
    akring
        6
    akring  
    OP
       2023 年 2 月 6 日
    @nba2k9 Vim 界的 rm -rf 是吧
    HiHi
        7
    HiHi  
       2023 年 2 月 6 日   7
    1. ga 查看字符编码
    2. <c-q> 输入编码得到字符
    3. c-a,c-x 实现数字简单++--,(win 下要注意 unmap 掉这两个快捷键,默认可能因为 behave win 变成了全选跟剪切)
    4. :e! 放弃修改重新加载文件
    zdt3476
        8
    zdt3476  
       2023 年 2 月 6 日   1
    我习惯用 caw 从描述来看好像和 ciw 一样? 还有就是我比较喜欢用 ctrl+v 进行整列编辑
    jorneyr
        9
    jorneyr  
       2023 年 2 月 6 日   3
    :x 保存退出
    jdhao
        10
    jdhao  
       2023 年 2 月 6 日 via Android
    这个叫 text object ,非常有用,绝对是使用 vim 的 top 必备技能
    jdhao
        11
    jdhao &bsp;
       2023 年 2 月 6 日 via Android   2
    @zdt3476 不一样,caw 会删除 word 周围的空格,ciw 不会
    cluulzz
        12
    cluulzz  
       2023 年 2 月 6 日
    ggdG,ctrl v
    moreant
        13
    moreant  
       2023 年 2 月 6 日   1
    前两个都属于文本对象的操作,有时候写 html 的时候可以 cit/cat 删除整个 tag ,挺方便的。

    就是一直想知道 vim 要如何实现类似 IDEA 里 <a-j> 的选中下一个单词(Select next occurrence)
    duadua
        14
    duadua  
       2023 年 2 月 6 日   4
    normal mode:
    ctrl-a 让光标后面第一个数字 +1
    ctrl-x 让光标后面第一个数字 -1

    也可以通过 visual mode 控制操作的数字的范围
    akring
        15
    akring  
    OP
       2023 年 2 月 6 日
    @cluulzz
    感谢分享,ggdG 应该是删除全文 ( gg + d + G 复合起来的),ctrl+v 是楼上 @zdt3476 提到的进行整列编辑

    大家分享命令的时候还是尽量带一下用法和作用吧,这样不熟悉 vim 的小伙伴也能看懂
    eaststarpen
        16
    eaststarpen  
       2023 年 2 月 6 日   2
    dit, dat, cit, cat, di", ci" ......

    就像 @jdhao 说的, 很方便的 "modify" 特定范围的 "character sequences"

    `dit` means delete in tag(personaly)

    在修改 xml 和 html 时候很有用

    此外, di" 这种不一定要在引号中才能用, 他会自动向后寻找

    e.g. "this is <光标>a 'example'" 在 <光标> 处 ci' 会自动删除 example 并进入 insert mode

    for more: h text-objects
    Diphia
        17
    Diphia  
       2023 年 2 月 6 日
    @moreant 不确定你要找的是不是 *
    leexiaolang
        18
    leexiaolang  
       2023 年 2 月 6 日   1
    @acoada 多光标操作? 如果是这个需求的话可以插件 vim-visual-multi 实现
    nowto
        19
    nowto  
       2023 年 2 月 6 日   1
    view xyz.txt (或者 vim -R xyz.txt)以只读模式打开文件,相当于 less xyz.txt 或 more xyz.txt
    但是 是用 vim 查看文件
    cassyfar
        20
    cassyfar  
       2023 年 2 月 6 日   1
    :o 插入新的一行并编辑

    ctrl + v 进入视觉编辑模式
    windstill
        21
    windstill  
       2023 年 2 月 6 日   1
    块操作: ^ <C-v> <C-d> I-- [ESC]

    ^ → 到行头
    <C-v> → 开始块操作
    <C-d> → 向下移动 (你也可以使用 hjkl 来移动光标,或是使用%,或是别的)
    I-- [ESC] → I 是插入,插入“--”,按 ESC 键来为每一行生效。

    引用自《简明 Vim 练级攻略 | 酷壳 - CoolShell.cn

    如果是在行尾添加的话,就在块操作之后,$到行尾,按 A 插入字符,然后 ESC 每行生效
    windstill
        22
    windstill  
       2023 年 2 月 6 日   1
    还有个剪切板的操作

    "+yy // 复制当前行到剪切板
    "+p // 将剪切板内容粘贴到光标后面
    857681664
        23
    857681664  
       2023 年 2 月 6 日   1
    : 1, 5 t .
    可以使用命令模式快速复制某个区域的文本到当前光标位置,可以非常方便地在不需要移动光标进行复制
    CL7
        24
    CL7  
       2023 年 2 月 6 日   2
    <a href="https://sm.ms/image/V5ZhlyA4uafmv7x" target="_blank"><img src="https://s2.loli.net/2023/02/06/V5ZhlyA4uafmv7x.png" ></a> 这个图不错
    EyebrowsWhite
        25
    EyebrowsWhite  
       2023 年 2 月 6 日   1
    还有个,如果你安装了 jq ,那么可以用 `:%!jq .` 来格式化 json 文件,参考自 https://www.putorius.net/format-json-file-in-vim.html
    xuminzhong
        26
    xuminzhong  
       2023 年 2 月 6 日   1
    @akring 第一条 ciw ,平时都是用 cw ,两个好像没区别,都是会进入编辑模式。
    chuan0144
        27
    chuan0144  
       2023 年 2 月 6 日   2
    上面好多回复都是很基础的操作,建议看看《 Vim 实用技巧》Drew Neil 著
    JackieMe
        28
    JackieMe  
       2023 年 2 月 6 日 via Android   1
    @xuminzhong 当你在一个单词中间的时候,cw 只会把光标后的部分删掉并进入编辑模式,ciw 会把整个单词删掉。
    JackieMe
        29
    JackieMe  
       2023 年 2 月 6 日 via Android   1
    @zdt3476 caw 会在 ciw 的基础上删掉当前单词后面的空格
    z1645444
        30
    z1645444  
       2023 年 2 月 6 日   1
    知道 leader 键以后,设置和使用各种舒畅。
    sadfQED2
        31
    sadfQED2  
       2023 年 2 月 6 日 via Android   2
    %d
    清空全部内容。不知道这个命令之前我要按半小时删除键才能把内容删完
    fuwu1245
        32
    fuwu1245  
       2023 年 2 月 6 日
    牛牛牛
    这快捷键好使,谢谢楼主
    mmcross
        33
    mmcross  
       2023 年 2 月 6 日
    看完这个,关闭页面时,不由自主的输了个:
    Chaconne
        34
    Chaconne  
       2023 年 2 月 6 日 via iPhone
    @nba2k9 老哥稳,我投给这个
    GiantHard
        35
    GiantHard  
       2023 年 2 月 6 日 via Android   1
    cia, 依赖 text-obj-args 插件,删除当前参数并进入编辑模式,对于有类型标注的编程语言来说,比 ciw 效率高至少一倍
    Sainnhepark
        36
    Sainnhepark  
       2023 年 2 月 6 日 via Android   1
    <C-v> 选中某一块文本,然后按 c ,效果是删除这一块文本,然后插入新文本,最重要的是新插入的字符会应用到每一列中,可以在一定情况下替代多光标插件。相比于多光标插件,这个特性是内置的,按的键也比多光标插件少,在某些情况下会非常方便,尤其是处理日志的时候。
    ETiV
        37
    ETiV  
       2023 年 2 月 6 日 via iPhone   1
    normal mode 下的 %,可以跳到匹配的代码块的另一端,查看、复制整段代码什么的很有用
    JerBrains 里应该是 ctrl-m
    Sainnhepark
        38
    Sainnhepark  
       2023 年 2 月 6 日 via Android   1
    顺便楼上提到的 text object ,其实可以装插件扩展,GitHub 上搜 textobj user ,有很多第三方 text object ,我最常用的三个是 text-obj-line 用来选中当前行,textobj-url 选中当前链接以及 textobj-entire 选中当前 buffer 的所有文本。
    cwcc
        39
    cwcc  
       2023 年 2 月 6 日   1
    我现在就会用 : 加个数字挑行,? 加文字搜索,:wq 保存退出,ZZ 没修改看一眼的文件直接退出,:q! 修改了但不想保存并退出,dd 删掉一行,i 插入。写点简单的都够用了。

    对了,一旦某一天用 vim 用多了,我就习惯性地在 IDE 里先按下 Esc ,然后莫名在某个地方输入了 :wq ,之前老是保存这个东西。
    ETiV
        40
    ETiV  
       2023 年 2 月 6 日 via iPhone
    哦对 GitHub 上可以搜到一个 server 用的 vimrc 配置文件,我现在在用这个(稍微改了一下)。

    里面预置了不少快捷键,比如可以在 input mode 用 F2 切换 :set paste 啥的,都是超级实用的东西
    ETiV
        41
    ETiV  
       2023 年 2 月 6 日 via iPhone   1
    ChengLuffy
        42
    ChengLuffy  
       2023 年 2 月 6 日   3
    set mouse=a

    在终端 vim 中使用鼠标
    geebos
        43
    geebos  
    PRO
       2023 年 2 月 6 日
    学到了,我一直是 b 移到头部再 cw
    guss0x625
        44
    guss0x625  
       2023 年 2 月 6 日
    .......
    Longerrrr
        45
    Longerrrr  
       2023 年 2 月 6 日   2
    ctrl + v 进入竖编辑模式

    选择一列数字

    ctrl + a

    选择的数字会递增
    Longerrrr
        46
    Longerrrr  
       2023 年 2 月 6 日   1
    漏了个, 选中后按 g ( globaly) 再 ctrl + a
    654656413245
        47
    654656413245  
       2023 年 2 月 6 日
    :wq 保存并退出,无论有无修改均更新时间戳
    :x 保存并退出,无修改时不更新时间戳
    derek80
        48
    derek80  
       2023 年 2 月 6 日   1
    Ctrl + o 的确用的最多。楼上好多没用过的命令,大家有没有汇总的手册可以随时查的?
    lopda
        49
    lopda  
       2023 年 2 月 6 日
    e~请查阅《 Vim 实用技巧》
    opengps
        50
    opengps  
       2023 年 2 月 6 日
    不应该是 Ctrl+C ,Ctrl+Q 吗?从 win 过来的新人都会犯的错误
    akring
        51
    akring  
    OP
       2023 年 2 月 6 日   1
    @derek80 一般也就是参考 Vim Cheat Sheet 之类的,但总会有一些没涉及到的奇技淫巧,所以想看看大家分享
    ethusdt
        52
    ethusdt  
       2023 年 2 月 6 日   1
    cs"' change suround "" to ''
    windy0925
        53
    windy0925  
       2023 年 2 月 6 日
    .
    Ingo
        54
    Ingo  
       2023 年 2 月 6 日   1
    ZZ 保存并退出当前 buffer 。
    windy0925
        55
    windy0925  
       2023 年 2 月 6 日
    敲错了直接发出去了。接上一条,就是.这个命令
    xuminzhong
        56
    xuminzhong  
       2023 年 2 月 6 日
    @JackieMe 感谢,挺有用的,Got 。
    wangerka
        57
    wangerka  
       2023 年 2 月 6 日   4
    record 做批量很好用
    ![]( )
    notgoda
        58
    notgoda  
       2023 年 2 月 6 日 via iPhone
    @Sainnhepark 你好,请问 ctrl -c 是进入视觉编辑模式? 然后要怎么选中某一块文字呢?除了用鼠标之外
    notgoda
        59
    notgoda  
       2023 年 2 月 6 日 via iPhone
    @Sainnhepark
    @akring 请问大家在 vim 怎么选中某一块文字?是先 CTRL-v 进入进入视觉编辑模式? 然后要怎么选中?除了用鼠标之外。复制是用什么快捷键呢? +yy 只能复制当前行
    xiaket
        60
    xiaket  
       2023 年 2 月 6 日
    宏然后批量 apply
    lewis0xx001
        61
    lewis0xx001  
       2023 年 2 月 6 日
    @szyp 66666~
    webcape233
        62
    webcape233  
       2023 年 2 月 6 日 via iPhone
    进入 visual block 模式
    向下按多行
    键入 shift i
    增删一些东西
    按两下 esc

    完成了多行编辑
    testcase1
        63
    testcase1  
       2023 年 2 月 6 日
    gv
    Sainnhepark
        64
    Sainnhepark  
       2023 年 2 月 6 日 via Android
    @notgoda hjkl 或方向键呀,你怎么在 visual mode 选的就怎么选呗
    testcase1
        65
    testcase1  
       2023 年 2 月 6 日
    help substitute
    testcase1
        66
    testcase1  
       2023 年 2 月 6 日   1
    @moreant <a-n> <a-p>
    testcase1
        67
    testcase1  
       2023 年 2 月 6 日
    vim.keymap.set("n", "j", "gj", opt)
    vim.keymap.set("n", "k", "gk", opt)
    testcase1
        68
    testcase1  
       2023 年 2 月 6 日
    最后 最牛逼的 vim 命令 : nvim
    ljpCN
        69
    ljpCN  
       2023 年 2 月 6 日
    参见 vim cheat sheet: https://www.vimcheatsheet.com/
    bjzhush
        70
    bjzhush  
       2023 年 2 月 6 日
    说真的,现在看到这些命令都需要思考下才能明白了,但是我用起来一点问题没有,因为已经都是下意识操作了,十几年了
    superrichman
        71
    superrichman  
       2023 年 2 月 6 日 via Android
    那一定是 ctrl q, 因为 vim 里习惯性按到 ctrl s 就死了
    mangoDB
        72
    mangoDB  
       2023 年 2 月 6 日
    %s/foo/bar/g

    replace 功能
    simo
        73
    simo  
       2023 年 2 月 6 日
    qa -> q -> n@a
    Al0rid4l
        74
    Al0rid4l  
       2023 年 2 月 6 日
    gg=G
    kergee
        75
    kergee  
       2023 年 2 月 6 日
    加密 :X(大写的 X)
    16 进制显示 :%!xxd
    techstay
        76
    techstay  
       2023 年 2 月 6 日
    浏览器常驻页面,忘了什么就在点进去看看 https://github.com/techstay/awesome-cheatsheets/blob/master/editors/vim.txt
    gogorush
        77
    gogorush  
       2023 年 2 月 6 日
    yi 某个符号或者 w 。
    w 代表当前的 word
    某个符号代表某个符号限定范围内,特别适合复制“”,‘’这个符号内的内容
    0xLittleFi
        78
    0xLittleFi  
       2023 年 2 月 6 日   1
    viw 选中单词
    vi) 选中 '()'内的东西 同理:vi} 大括号

    f 搜索
    fb fa 选中右边第一个 b a 字母
    ; 重复执行之前输入过的流程

    比如 fb ; ; ; ;
    一直搜索后面的 b 字母
    dorothyREN
        79
    dorothyREN  
       2023 年 2 月 6 日
    @jorneyr #9 我选择 SHIFT+ZZ
    macscsbf
        80
    macscsbf  
       2023 年 2 月 6 日
    看《 vim 使用技巧》在学习中
    nag
        81
    nag  
       2023 年 2 月 6 日
    分享下我的 vimrc 的几个配置

    直接在 Normal 和 Visual 模式下直接用 Tab 和 Shift-Tab 缩进,这样就不用先进入 Insert 模式再按 tab:
    nmap <tab> v>
    nmap <s-tab> v<
    vmap <tab> >gv
    vmap <s-tab> <gv

    按下 <leader>W 可以清除当前文件每一行中的最后的空格:
    nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
    Fatinora
        82
    Fatinora  
       2023 年 2 月 7 日
    宏,vim 最强大的特性。
    sanebow
        83
    sanebow  
       2023 年 2 月 7 日 via iPhone
    来说个简单好用的,xp ,当两个字符前后打反时可以调换过来,比如 mian -> main
    Jony4Fun
        84
    Jony4Fun  
       2023 年 2 月 7 日
    @cluulzz 我一般用 ggcG ctrl v
    好像经常非编辑模式下粘贴会少掉点东西
    pooorguy
        85
    pooorguy  
       2023 年 2 月 7 日
    @notgoda 在起始位置按 v ,接着按 hjklweb$^这些导航键选中,再按 y 复制,接 p 粘

    可以试试 neovim8.0 以上,默认可以鼠标操作复制粘贴
    gw4gw
        86
    gw4gw  
       2023 年 2 月 7 日
    进来学技能
    xujiabin
        87
    xujiabin  
       2023 年 2 月 7 日
    vep, 替换 word(从剪贴板)
    wisetc
        88
    wisetc  
       2023 年 2 月 7 日
    :x close
    likeme
        89
    likeme  
       2023 年 2 月 7 日
    很少用 vim 了。。改文件都是用 idea 打开再上传 hhh
    Bingchunmoli
        90
    Bingchunmoli  
       2023 年 2 月 7 日 via Android
    只会 wq ! q 路过,说实话 open wrt 等各种奇怪设备有时 vim 有 bug 有时 nano 有 bug 换着用
    mangoDB
        91
    mangoDB  
       2023 年 3 月 9 日
    :set nu # 显示行号
    :set nonu # 关闭行号
    :nohl # 关闭高亮
    / 查找
    ? 查找(反向)
    kingfire
        92
    kingfire  
       2023 年 7 月 25 日 via Android
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2689 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 232ms UTC 01:00 PVG 09:00 LAX 18:00 JFK 21:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86