V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
alanerzhao
V2EX  ›  问与答

说说你知道的VIM小技巧?

  •  
  •   alanerzhao · 2012-08-10 20:05:31 +08:00 · 5079 次点击
    这是一个创建于 4495 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发题,大家说一下自己了解VIM的小技巧吧?或者好东西分享一下,谢谢大家了,VIM好爱者。
    43 条回复    2014-07-27 17:17:36 +08:00
    kongruxi
        1
    kongruxi  
       2012-08-10 20:28:16 +08:00   ❤️ 1
    alanerzhao
        2
    alanerzhao  
    OP
       2012-08-10 20:38:51 +08:00
    @kongruxi 你这只接是一个vimrc?
    thcode
        3
    thcode  
       2012-08-10 20:53:18 +08:00
    退出可以输入 ZZ 或者 :x
    thinkinnight
        4
    thinkinnight  
       2012-08-10 21:10:29 +08:00   ❤️ 2
    前后两个字母调换位置可以用xp
    magicsilence
        5
    magicsilence  
       2012-08-10 21:16:24 +08:00
    :h
    haiyang416
        6
    haiyang416  
       2012-08-10 21:34:53 +08:00
    借地问一个vim定制版,就前不久论坛里有人推荐,用到vundle管理的,自带了很多插件,翻了半天帖子没有找到,有人记得吗?
    luin
        7
    luin  
       2012-08-10 21:42:35 +08:00   ❤️ 1
    https://github.com/luin/dotfiles
    里面有我的vim配色插件配置啥的。。
    haiyang416
        8
    haiyang416  
       2012-08-10 21:47:56 +08:00
    抱歉,怕把楼歪了,我重新发了个帖子。
    alanerzhao
        9
    alanerzhao  
    OP
       2012-08-10 23:11:08 +08:00
    @haiyang416 哪个论坛?
    alanerzhao
        10
    alanerzhao  
    OP
       2012-08-10 23:11:27 +08:00
    @kongruxi 还有别的好的收藏吗?
    binux
        11
    binux  
       2012-08-10 23:24:00 +08:00
    :q! 是退出
    realfex
        13
    realfex  
       2012-08-10 23:42:09 +08:00
    ctrlv +shift i 多行注释算吗…
    tioover
        14
    tioover  
       2012-08-10 23:44:07 +08:00
    :sex
    谁用谁知道
    liuhang0077
        15
    liuhang0077  
       2012-08-10 23:48:21 +08:00
    @binux 你这个是强制退出 >.< 正常的 应该是 wq 或 q 吧~
    binux
        16
    binux  
       2012-08-11 00:01:03 +08:00   ❤️ 1
    @liuhang0077 这是执行vi,然后乱按一通之后的最好选择
    lldong
        17
    lldong  
       2012-08-11 00:07:53 +08:00
    建议去vimgolf做那些题目,从别人的答案中能学到不少有用的技巧
    bitsmix
        18
    bitsmix  
       2012-08-11 00:10:52 +08:00
    Ctrl + a
    Ctrl + x
    kongruxi
        19
    kongruxi  
       2012-08-11 00:12:28 +08:00
    主要是 vimrc 的配置:

    " <leader>W 清除行尾的空白字符
    nnoremap <leader>W :%s/\s\+$//<cr>:let @/=''<CR>
    " 选中刚才粘贴的代码
    nnoremap <leader>V V`]
    " 水平分割窗口
    nnoremap <leader>s <C-w>s
    " 垂直分割窗口
    nnoremap <leader>v <C-w>v
    " Ctrl+jkhl 来切换分割的窗口
    map <C-j> <C-W>j
    map <C-k> <C-W>k
    map <C-h> <C-W>h
    map <C-l> <C-W>l

    还有很多在: https://github.com/HungYuHei/vimfiles/blob/master/vimrc

    ----------------
    还有比较常用的:
    在文件中按 m + <a-z> 可以 mark 下当前行,然后在当前文件的任意位置按 ' + <a-z> 就可以跳回对应 mark 了的行
    ----------------

    还有很多东西是通过插件实现的
    mitnk
        20
    mitnk  
       2012-08-11 00:12:57 +08:00
    告诉我我误用了Tab或行末有多余空格:

    set list listchars=tab:>-,trail:▄

    放到vimrc里

    如果 ▄ 不好用,可以换成别的 比如 $ 符号。
    ljbha007
        21
    ljbha007  
       2012-08-11 00:18:08 +08:00
    按j是往下移动光标
    alanerzhao
        22
    alanerzhao  
    OP
       2012-08-11 00:21:13 +08:00
    @kavinyao 谢谢,收集tips中。
    alanerzhao
        23
    alanerzhao  
    OP
       2012-08-11 00:22:42 +08:00
    @lldong 地址是?
    alanerzhao
        24
    alanerzhao  
    OP
       2012-08-11 00:23:05 +08:00
    @kongruxi 谢谢分享
    mitnk
        25
    mitnk  
       2012-08-11 00:27:31 +08:00   ❤️ 1
    @realfex 谢谢,想知道这个命令好久了!

    以前见一位同事用过这个命令,当时忘记问他了。

    @realfex 说得少了点。应该是

    Ctrl-V(进入列模式)用jk上下移动选中需要插入的行,然后Shift-I插入内容,按ESC生效。

    另一技巧是当你用j向下移动已经选中一些行,但这时需要将起点上面几行也加入时,可以按下o键(Other side)就可以按k选行了。(此技巧也可以用在Visual Mode -- Shift-V中)
    lldong
        26
    lldong  
       2012-08-11 01:10:58 +08:00   ❤️ 1
    yangg
        27
    yangg  
       2012-08-11 02:09:16 +08:00
    @mitnk o 这个不错
    args
        28
    args  
       2012-08-11 06:06:00 +08:00
    :h quickref
    alanerzhao
        29
    alanerzhao  
    OP
       2012-08-11 09:27:10 +08:00
    @mitnk 谢谢补允
    AlloVince
        31
    AlloVince  
       2012-08-11 10:09:56 +08:00   ❤️ 1
    kaychen
        32
    kaychen  
       2012-08-11 10:16:59 +08:00
    shift+n 自动匹配
    dw 删除字符段
    clww
        33
    clww  
       2012-08-11 11:35:25 +08:00
    刚了解的一个,普通用户用sudo权限保存(一次) `:w !sudo tee %`
    Esc隔得太远,映射成了jj,修改vimrc `:imap jj <Esc>`
    tioover
        34
    tioover  
       2012-08-11 11:56:22 +08:00
    可以把默认剪贴板改成系统剪贴板,命令忘了
    cfddream
        35
    cfddream  
       2012-08-11 14:13:02 +08:00
    @tioover
    ```vim
    nnoremap <silent><leader>p :call system('pbcopy', expand('%:p'))<cr>
    vnoremap <leader>cp y:call system('pbcopy', getreg("\""))<cr>
    nnoremap <leader>vv :call setreg("\"",system('pbpaste'))<cr>p
    ```
    iwinux
        36
    iwinux  
       2012-08-11 17:03:11 +08:00
    set list
    set listchars=tab:»·,trail:·

    显示行尾空格 ><
    PrideChung
        37
    PrideChung  
       2012-08-11 18:34:14 +08:00
    `ci"` 可以直接修改引号内的内容,写HTML的时候特别方便。还可以`ci'` `ci(` `ci[` `ci{` …
    当然也可以把 c 改成 d,不进入Insert Mode。

    曾经试过想转到Emacs,就是这个命令让我继续留在Vim阵营。
    bitsmix
        38
    bitsmix  
       2012-08-11 18:36:36 +08:00
    @clww ctrl + [ 多好。
    jerommix
        39
    jerommix  
       2012-08-11 19:32:45 +08:00   ❤️ 1
    alanerzhao
        40
    alanerzhao  
    OP
       2012-08-11 22:53:51 +08:00
    @AlloVince 谢谢分享有时间去看。
    alanerzhao
        41
    alanerzhao  
    OP
       2012-08-11 22:54:31 +08:00
    @kaychen 谢谢分享
    @tioover 多谢
    @jerommix 好东西
    tioover
        42
    tioover  
       2012-08-12 09:58:04 +08:00
    @cfddream
    只需要一句:

    "将默认剪贴板设置为系统剪贴板
    set clipboard=unnamedplus
    zeroday
        43
    zeroday  
       2014-07-27 17:17:36 +08:00
    撤销:u
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1813 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:29 · PVG 00:29 · LAX 08:29 · JFK 11:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.