vim 有一问题请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
numgao
V2EX    Vim

vim 有一问题请教

  •  
  •   numgao 2019-12-21 20:11:40 +08:00 5343 次点击
    这是一个创建于 2120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近又想把 vim 好好学一学 觉得真是个好工具

    就是有个问题,就是用 vim 编辑比如说 python 或者 c 的时候 怎么能在 vim 和 shell 里快速切换来编译和编辑呢
    一直用:q 来回退出再进太麻烦了

    前几天看了一个主题是讨论这个的 但是找不到了 不知道是不是这里的或者是水木的
    有谁知道答案 或者那个相近的链接
    谢谢哈
    33 条回复    2020-03-17 16:42:00 +08:00
    xlcoder166
        1
    xlcoder166  
       2019-12-21 20:13:41 +08:00
    点: ! 执行命令
    jworg
        2
    jworg  
       2019-12-21 20:15:00 +08:00   1
    1, Ctrl + z 后台,fg 回来; 2, :! 执行 shell 命令; 3, vim 应该像 Emacs 有类似 eshell 的玩意,你可以搜一搜
    tinyproxy
        3
    tinyproxy  
       2019-12-21 20:17:15 +08:00 via iPhone   1
    tmux
    Meltdown
        4
    Meltdown  
       2019-12-21 20:24:31 +08:00 via Android
    或者另外开几个标签,alt 加数字来回切
    zeny620
        5
    zeny620  
       2019-12-21 20:27:53 +08:00   3
    :terminal
    blessingsi
        6
    blessingsi  
       2019-12-21 20:44:12 +08:00 via Android
    :shell
    sazima
        7
    sazima  
       2019-12-21 20:47:20 +08:00
    tmux
    nightwitch
        8
    nightwitch  
       2019-12-21 20:51:33 +08:00
    python 不太清楚,vim 可以在 vim 内直接调用 make 编译 makefile,也有 make 命令可以使用。

    F5 一键编译单文件
    autocmd filetype c set makeprg=gcc\ -O2\ -lpthread\ -std=c99\ -g\ %\ -o\ %<
    autocmd filetype c nnoremap <F5>:silent make\|redraw!\|cw<CR>

    要边写,边编译,边 debug 的话,tmux 或者 screen 应该是跑不掉的
    rudyyuan
        9
    rudyyuan  
       2019-12-21 20:54:53 +08:00 via Android
    推荐下俺的博客,欢迎跟我一起学习
    https://vimjc.com
    weixiangzhe
        10
    weixiangzhe  
       2019-12-21 20:59:31 +08:00 via Android
    vim 里现在也带 terminal 的,然后楼上说的都对
    iamtricker
        11
    iamtricker  
       2019-12-21 21:51:16 +08:00
    可以试试 tmux,也挺方便的。
    luassuns
        12
    luassuns  
       2019-12-21 23:19:15 +08:00
    asyncrun
    rayhy
        13
    rayhy  
       2019-12-21 23:21:48 +08:00
    可以设置成类似 vscode 那样,按一下 ctrl+`就出来一个 terminal
    hellos
        14
    hellos  
       2019-12-21 23:32:35 +08:00 via Android
    :! python %
    hellos
        15
    hellos  
       2019-12-21 23:33:54 +08:00 via Android
    :!python %
    sunwei0325
        16
    sunwei0325  
       2019-12-22 02:37:59 +08:00
    tmux 配合 'benmills/vimux' 这个插件
    cf020031308
        17
    cf020031308  
       2019-12-22 02:42:38 +08:00
    用 tmux 分屏分窗都可以,一边用 vim,另一边还在命令行里,要编译要怎样随便。
    vim 是个编辑器,专注于编辑功能就好。不要在编辑器里做该用 shell 做的事情,这一点也不酷。不要学 Emacs。
    MrUser
        18
    MrUser  
       2019-12-22 08:54:28 +08:00
    yum install screen
    $ screen
    $ vim file.ext
    ^a # ctrl+a 创建一个新窗口
    $ cd ~/projects/xxx && make # 在新窗口 cd 并 make
    ^aa # 按两次 ctrl+a 回上一个窗口
    MrUser
        19
    MrUser  
       2019-12-22 08:55:43 +08:00
    更正:^a,c 才是创建窗口,即:ctrl+a, ctrl+c
    到上一个窗口: ^a,p
    到下一个窗口: ^a,n
    wjidea
        20
    wjidea  
       2019-12-22 09:38:54 +08:00
    tmux 走一波
    zealot0630
        21
    zealot0630  
       2019-12-22 10:09:37 +08:00 via Android
    为什么要切换,编译运行调试都可以在 vim 里面做啊
    jdhao
        22
    jdhao  
       2019-12-22 13:01:48 +08:00
    推荐楼上说的 asyncrun.vim ,利用了 vim 和 neovim 的 job 特性,可以直接异步执行程序然后把程序输出的结果输出到 quickfix list 中,不会阻塞 vim。使用 !python test.py 缺点是会阻塞 vim,程序执行的时候你不能执行任何操作了,只能等待命令结束,返回结果。

    之前还写了一篇文章介绍 asyncrun 执行 python 程序,其他语言应该是一样设置的: https://jdhao.github.io/2019/12/09/vim_asynchronous_command_run/
    yujincheng08
        23
    yujincheng08  
       2019-12-22 13:33:59 +08:00
    asyncrun.vim 确实不错的
    Gave2620
        24
    Gave2620  
       2019-12-22 14:00:03 +08:00 via iPhone
    tmux
    另外可以用 when-changed
    Tink
        25
    Tink  
    PRO
       2019-12-22 15:12:09 +08:00 via iPhone
    tmux
    PTLin
        26
    PTLin  
       2019-12-22 15:52:55 +08:00
    用:terminal,然后<C-w>w 循环切换窗口。
    yianbin
        27
    yianbin  
       2019-12-22 22:49:12 +08:00
    @rudyyuan 博客不错 收藏了
    rainbowchou
        28
    rainbowchou  
       2019-12-22 23:10:37 +08:00
    我觉得你可以 把 vimtutor 走一遍,进阶的之后再说
    fps23dot9999
        29
    fps23dot9999  
       2019-12-23 09:30:08 +08:00
    1. Ctrl-Z 后台,fg 切回
    2. tmux
    3. vim8.0 以上支持:terminal
    4. normal 命令前加!,调用 shell 命令
    numgao
        30
    numgao  
    OP
       2019-12-23 11:03:57 +08:00 via Android
    @fps23dot9999 多谢回复 学习了不少!但有没有那种按 f5 之类的就能快捷编译的快捷键之类的呢
    numgao
        31
    numgao  
    OP
       2019-12-23 11:04:29 +08:00 via Android
    @rainbowchou 是的 还是新手
    fps23dot9999
        32
    fps23dot9999  
       2019-12-24 09:44:59 +08:00
    @numgao 用 vim 的 make 集成,:help make,:help quickfix。8 楼都给了方案了。
    tomychen
        33
    tomychen  
       2020-03-17 16:42:00 +08:00
    terminal 分屏
    tmux + tmux 分屏
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6013 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:09 PVG 10:09 LAX 19:09 JFK 22:09
    Do have faith in what you're doing.
    ubao 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