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

全民阅读 vimrc

  •  1
     
  •   SpaceVim · 2018-03-16 06:58:36 +08:00用 Android 发布 · 4562 次点击
    这是一个创建于 489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    活动介绍

    之前在国外社区看到一个活动,感觉比较有意思。

    主要的活动内容是,在一篇帖子下面,大家发自己的 vimrc,然后由别人来 review。可惜是英文的。

    所以,我想在 V2EX 这里搞一个类似的中文活动。

    目的在于和大家一起阅读学习下别人的 vimrc 配置。

    如何参与?

    可以将你的 vimrc 链接直接留在评论区,请注意,留的是某个 commit 下的 vimrc,避免后期你的修改影响别人 review。

    第 1 条附言  ·  2018-03-18 08:59:41 +08:00

    感谢这么多人参加,我开了一个仓库,会在该仓库 issue 内讨论。

    需要review vimrc 的,可以开issue。记住,请发某个commit的vimrc,不要直接发仓库地址。

    https://github.com/SpaceVim/reading-vimrc

    第 2 条附言  ·  2018-05-14 12:21:39 +08:00
    感觉 telegram 上面聚集人还是挺快的,不知不觉群里已经突破一千人了,虽然之前用 QQ 群也已经 1600+人,但是 QQ 群里还是很多内容不太方便讨论,最关键的问题就是无法标记未读消息,这对于平时比较忙的人来说,很容易遗漏消息。

    欢迎大家一起来聊聊 vim 相关问题:

    https://t.me/VimHub

    或者使用 gitter:

    https://gitter.im/vim-china/Lobby
    53 回复  |  直到 2018-06-18 00:52:11 +08:00
        1
    orm   2018-03-16 07:28:27 +08:00 via iPhone
    set number
        2
    Xibuka   2018-03-16 07:37:26 +08:00
        3
    SpaceVim   2018-03-16 07:42:16 +08:00 via Android
    @Xibuka 所以的 autocmd 应该放到一个 augroup 里,这样避免重复载入

    augroup MyAutocmd
    au!
    autocmd VimEnter * call Foo()
    augroup END

    后面你可以这样叠加,

    autocmd MyAutocmd FileType python call Foo()
        4
    SpaceVim   2018-03-16 07:43:50 +08:00 via Android
    @Xibuka
    map <C-J> :bnext<CR>

    map <C-K> :bprev<CR


    这两个应该用 noremap,避免递归解释按键。
        5
    ericls   2018-03-16 07:44:48 +08:00
    set rnu
        6
    SpaceVim   2018-03-16 07:45:33 +08:00 via Android
    @Xibuka color 那行可以删掉,你执行一次 colorscheme 就可以了。
        7
    Xibuka   2018-03-16 07:48:21 +08:00
    @SpaceVim ohhh! Thanks!
    vimrc 语法很多都还不熟,谢谢指正!
        8
    SpaceVim   2018-03-16 07:54:02 +08:00 via Android
    @Xibuka 客气啦,我看了你的配置,算是非常中规中矩的,除了里面一些快捷键映射没有用 nore,其他没什么问题,另外就是 nordtree 插件配置那块,变量前缀 g: 尽量不要省略,虽然不会报错,但是一旦你将这些配置复制到 方法里,他就变动不一样意思了。方法内外变量的默认作用域不一样的。
        9
    BlockBlockBlock   2018-03-16 08:36:41 +08:00 via iPhone
    虽然很久不用 vim 了,发点上古时期我的配置
    https://github.com/bramblex/BlxVimrc
        10
    SpaceVim   2018-03-16 08:42:30 +08:00 via Android
    @BlockBlockBlock 你这不是乔的吗?自己 V2EX 大号呢?我记得应该是自己造了一门语言,你这思路我看过,挺不错的,也是模块化的。
        11
    BlockBlockBlock   2018-03-16 08:45:06 +08:00 via iPhone
    @SpaceVim 是我的啊,我大号炸了,所以开了个小号…
        12
    SamZeng   2018-03-16 08:45:55 +08:00
        13
    wweir   2018-03-16 08:49:49 +08:00
    玩得花样比较多,看有什么问题
        14
    SpaceVim   2018-03-16 08:54:40 +08:00 via Android
    @SamZeng 你这没什么问题,主要都是 set 选项,不过你可以试试 local_vimrc 这个插件
        15
    SpaceVim   2018-03-16 08:56:38 +08:00 via Android
    @wweir 安装 plug 那段后面没必要 source $MYVIMRC
        16
    SpaceVim   2018-03-16 08:59:37 +08:00 via Android
    @wweir noremap <M-t>

    这个建议用 nnoremap 因为 noremap 包含不止一种模式。

    所有 vnormap 在不需要 select 模式的时候改成 xnoremap
        17
    yazoox   2018-03-16 09:09:20 +08:00
    https://github.com/alexya/envconfig/blob/master/config.vimrc
    这是俺的,比较 low,请大家帮忙指正
    谢谢
        18
    Jeremial   2018-03-16 09:11:25 +08:00
        19
    SpaceVim   2018-03-16 09:14:42 +08:00 via Android
    @yazoox
    GetPWD 这个方法其实没有意义,里面替换那个方法实际上什么也没换。
    vundle 这个管理器比较老了,而且你还是用原作者的仓库,那个仓库删了,自动重定向到了 vundlevim/vundle.vim

    nmap <Leader>ca :Calendar<cr>
    nmap <Leader>mr :MRU<cr>
    nmap <Leader>nt :NERDTree<cr>
    nmap <Leader>be :BufExplorer<cr>

    类似这样的配置,可以改成 nnoremap
        20
    SpaceVim   2018-03-16 09:17:07 +08:00 via Android
    @yazoox 自动关闭括号,可以用个插件,你那个每次都调用一次方法定义输入模式快捷键,显得浪费呀,索性你就定义一次。
    我记得前面有个 vimrc 里面有个不错的解决方法,你可以找找。用的 `<expr>` 判断光标前后字符的。
        21
    SpaceVim   2018-03-16 09:18:44 +08:00 via Android
    @Jeremial
    let mapleader="\<Space>"

    let g:mapleader="\<Space>"

    为什么两个呢?
        22
    SpaceVim   2018-03-16 09:20:47 +08:00 via Android
    @Jeremial iskeyword 这类选项建议用 ftplugin 写成 setlocal 毕竟不同语言关键字允许的字符不一样
        23
    SpaceVim   2018-03-16 09:23:05 +08:00 via Android
    @Jeremial
     autocmd BufNewFile,BufRead *.{c,cpp} set formatprg=astyle

    类似这种的 autocmd,实际上应该用 setlocal
        24
    uyhyygyug1234   2018-03-16 09:30:38 +08:00
    问下楼主 我希望终端里面粘帖的时候不会自动插入智能缩进的回车。我现在是配置了一个快捷键关闭的。

    参照的( http://vim.wikia.com/wiki/How_to_stop_auto_indenting

    关闭注释自动 comment
    set formatoptions-=cro

    nnoremap [space]i :setl noai nocin nosi inde=<CR>

    想问下怎么在 vimrc 里面配置。我直接在 vimrc 里面 setl noai nocin nosi inde 貌似没用。这个困扰我好久了。

    (主要的用法是 windows 里面复制一个代码片段,然后通过 xshell 右键粘帖到远端服务器的 vim 中。希望保留原格式,不要插入注释,还有换行啥的)


    @SpaceVim
        25
    SpaceVim   2018-03-16 09:36:25 +08:00 via Android
    @uyhyygyug1234 大片短复制到 Vim 可以用 "+p,或者如果你是想在输入模式下直接粘贴,你得先 set nopaste
        26
    SpaceVim   2018-03-16 09:36:47 +08:00 via Android
    @SpaceVim sorry,是 set paste
        27
    uyhyygyug1234   2018-03-16 09:42:46 +08:00
    @SpaceVim 恩应该是 输入模式下粘帖, "+p 是 linux 远端服务器上剪贴板内容的粘帖,我相当于是要把 win 上的内容,黏贴进 linux 中。你说的对!!!
        28
    SpaceVim   2018-03-16 09:48:38 +08:00 via Android
    @uyhyygyug1234 set paste 后,在输入模式直接粘贴效果会好一点
        29
    wweir   2018-03-16 09:57:11 +08:00 via Android
    @SpaceVim 重新 source vimrc 是因为我的 vimrc 写了 plugin 环境的自安装功能,source 才能生效
    <M-t> 这个自然是配合习惯来的,没啥可说的

    xnoremap 还真得了解一下
        30
    codehz   2018-03-16 10:06:12 +08:00
    @uyhyygyug1234 #24 我记得 neovim 有自带这个功能的支持。。
        31
    SpaceVim   2018-03-16 10:08:24 +08:00 via Android
    @wweir 没太看明白,正常情况下 vimrc 是可以自动读取的,你可以吧自动下载 plug 写在 vimrc 前面呀,可能你给的这个链接不是 vimrc 本身?
        32
    SpaceVim   2018-03-16 10:09:01 +08:00 via Android
    @codehz 是的,Neovim 会自动识别是手动输入还是粘贴
        33
    lemon0910   2018-03-16 10:26:26 +08:00
    https://github.com/lemon0910/lemon-neovim 大家帮忙 review 一下,有什么问题
        34
    ablegao   2018-03-16 10:28:56 +08:00
        35
    Youthink   2018-03-16 10:38:05 +08:00
        36
    SpaceVim   2018-03-16 21:44:38 +08:00
    @lemon0910 https://github.com/lemon0910/lemon-neovim/blob/master/init.vim#L90-L107 这里的 autocmd 应该放到一个 group 里面。
    https://github.com/lemon0910/lemon-neovim/blob/master/init.vim#L226-L228 针对 filetype 的 autocmd 里面的 set 应该用 setlocal
    https://github.com/lemon0910/lemon-neovim/blob/master/init.vim#L260-L270 这里应该用 noremap

    https://github.com/lemon0910/lemon-neovim/blob/master/init.vim#L260-L270 这一块应该包到一个 function 里面 用 autocmd Colorscheme * 来调用,不然,你在 vim 里面执行一个 colorscheme 命令换主题,你这些高亮设置就没有用了。
        37
    SpaceVim   2018-03-16 21:47:25 +08:00
    @ablegao 没发现什么问题,唯一是 这个方法

    init.vim#L260-L270 里面,其实可以优化一下的,你可以直接 setline 参数用 list,而不是多次调用 setline,后面的 normal 命令 最好改成 normal! 加一个感叹号防止按键映射对这个命令有影响。
        38
    skywind3000   2018-03-16 23:15:26 +08:00
    @lemon0910 配置不错啊,清爽,地道。

    挑个骨头啊:

    vnoremap v <Esc>

    其实不需要,visual mode 中按 v 本来就可以退出 visual mode,不需要再额外写一个,
    你看 `:h index` 里面 visual mode 一节
        39
    SpaceVim   2018-03-17 06:39:19 +08:00 via Android
    @skywind3000 厉害,眼睛尖,我也不知道这个
        40
    mrytsr   2018-03-17 18:34:24 +08:00 via Android
        41
    yech1990   2018-03-18 14:23:59 +08:00
    这几天修改的 spacevim 配置。



    Fn 区没搞清楚系统用了哪些键,防止冲突把一些自定义函数给注释掉了。
        42
    SpaceVim   2018-03-18 15:57:25 +08:00
    @yech1990 不错,不过,我建议如果那些方法,你如果不需要直接去调用,可以用局部方法替换掉全局方法。比如

    ```
    " task list new
    map <leader>tn :call New_Task_List()<cr>

    function! New_Task_List()
    if getline('.') =~ '^- \[ \]\ '
    call append(line('.'), "- [ ] ")
    call cursor(line('.')+1, 0)
    startinsert!
    elseif getline('.') =~ '^- \[x\]\ '
    call append(line('.'), "- [x] ")
    call cursor(line('.')+1, 0)
    startinsert!
    else
    echo "Not a item of task list!"
    endif
    endfunction
    ```

    这一段, 你可以改成:

    ```
    " task list new
    noremap <leader>tn :call <sid>new_task_list()<cr>

    function! s:new_task_list()
    if getline('.') =~ '^- \[ \]\ '
    call append(line('.'), "- [ ] ")
    call cursor(line('.')+1, 0)
    startinsert!
    elseif getline('.') =~ '^- \[x\]\ '
    call append(line('.'), "- [x] ")
    call cursor(line('.')+1, 0)
    startinsert!
    else
    echo "Not a item of task list!"
    endif
    endfunction
    ```

    使用局部方法有这么一个好处,他不会污染你的补全内容,当你在命令行里面补全方法名时。为相信当你在命令行里面补全方法名时肯定不希望这些不想要的方法名出现,不让他们出现最好的方法就是不用全局方法。
        43
    xcai   2018-03-18 17:55:36 +08:00
    @SpaceVim spacevim 的安装脚本中安装字体 Powerline 有一些貌似链接失效了,执行脚本完 在 ~/.local/share/fonts/ 目录下的字体大小不对,内部内容是 404 not found
        44
    SpaceVim   2018-03-18 18:30:36 +08:00 via Android
    @xcai 建议用 issue 提交问题,不过还是感谢你了,我晚点看下
        45
    kepbod   2018-03-23 01:17:51 +08:00
        46
    SpaceVim   2018-03-23 13:44:41 +08:00 via Android
    @kepbod 不建议直接在 vimrc 里面直接调用插件方法,当你第一次安装 Vim 环境时,这时候你所有插件都还没有下载,你直接调用的话会出现 unkown functinon 错误。

    call asyncomplete#register_source

    上面这段,如果你非要写在 vimrc 里面,可以用 try catch entry 包裹。

    我看了另外一个问题,就是新建 数据缓存文件的哪个方法,你用的是 global 方法,建议写成脚本局部方法,因为这个方法你应该不会在其他地方调用,或者可以将方法定义释放掉。类似 变量 的 unlet。
        47
    SpaceVim   2018-03-23 13:54:36 +08:00 via Android
    @kepbod 我看你定义了这段,
    autocmd BufWritePost $MYVIMRC source $MYVIMRC

    自动读取 vimrc,当写入这个文件时!

    其实你无非是想他读取你的一些 set 选项,插件链表更新,应该不会读取,我不太了解 vim-plug 是否支持这个,如果不支持,你可以判定是不是 vim 初次启动,如果初次启动就读取 vim 插件列表设置。可以用 has('vim_starting') 测试。
        48
    327beckham   2018-04-03 09:11:50 +08:00
    哇,请大神看看我的 , 我这是东拼西凑来的,可能有点繁杂
        49
    SpaceVim   2018-04-06 20:03:09 +08:00
    map <silent> <C-n> :NERDTreeToggle<CR>
    let NERDTreeShowHidden=1
    autocmd vimenter * if !argc() | NERDTree | endif

    @327beckham
    没什么大问题,不过上面三行,时三种代表性的问题,

    1. 映射尽可能用 noremap
    2. g: 全局变量前缀不能省掉,虽然不会出问题,但是当下次你想重构 vimrc 将这些脚本复制到一个方法内时,这些设置就无效了。
    3. autocmd 要放到 augroup 里
        50
    xiaohanqing   2018-04-09 10:31:15 +08:00
    @Xibuka
    map <F7> mzgg=G`z
    这一句有副作用,可以考虑用 winsaveview 和 winrestview 去替代 marks
        51
    xiaohanqing   2018-04-09 11:07:15 +08:00
        52
    lzyfred   2018-05-25 08:33:34 +08:00
    电报超好用啊。linux 用户表示很开心。
        53
    fcymk2   2018-06-18 00:52:11 +08:00
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2774 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 11:18 · PVG 19:18 · LAX 04:18 · JFK 07:18
    ♥ Do have faith in what you're doing.