开发工具 (纯干活) Rails 高效开发工具 vim 指南

lyfi2003 · 2014年05月16日 · 最后由 lyfi2003 回复于 2014年06月11日 · 18122 次阅读
本帖已被管理员设置为精华贴

( 排版好累,差不多了 )

前言

很久之前,写完一篇 Rails.vim 指南, 结果至今还有人去关注它。但它的内容已经过旧,我打算今天写一篇 Rails 高效开发工具 vim 的指南,不仅仅是新版的 Rails.vim 插件常用指令,还包括一些高效的 vim 使用指南。

再次说明,本文只适用于将 vim 用于 Rails 开发的待进阶高手。

我们将从最常用的 跳转指令 开始。

开始之前,推荐实战操作,建议安装我专为 Rails 开发准备的 vimrc 配置,相信你已经准备好了。

跳转

跳转是我们在任何 IDE 中都是最常用的一个功能,我使用以下插件来完成跳转:

  • Rails.vim
  • ctrlp.vim
  • NEDTtree
  • vim-easymotion

我们来根据实际需求来讲解,首先是标准目录的情况。

  1. 标准 Rails 目录

    Rails 的标准目录是我们最爱了,最常使用的就是使用 Rails.vim 的跳转。

    安装好相关插件后,我们进入一个 Rails 目录,比如 wblog, 打开 vim, Rails.vim 就自动启动了。

    输入:

    Rcontroller blogs : 跳转至控制器 app/controllers/blogs_controller.rb

    Rmodel post: 跳转至模型 app/models/post.rb

    同理,Rjavascript, Rstylesheet, Runittest, Rspec, Rfunctiontest 不消多说。

    更酷的是相关性跳转,它会根据你的 controller 名来确定用哪个 views, 例如你在 app/controllers/blogs_controller.rb, 输入

    +-------------+----+---------------------------------+
    | Rview index | -> | app/views/blogs/index.html.slim |
    +-------------+----+---------------------------------+
    | Rhelp       | -> | app/helpers/blogs_helper.rb     |
    +-------------+----+---------------------------------+
    

    这种相关性跳转超酷,几乎所有的跳转都支持它,而且随时可以尝试使用 TAB 补全。

    别急,还有更酷的是 gf 指令,假如你在 app/controllers/blogs_controller.rb 文件中,光标在 def index 方法上,按下 gf 指令,Oh My God, 自动跳转至 app/views/blogs/index.html.slim 了,别急,ctrl + 6 切回去吧。

    这个 gfctrl + 6 是我非常常用的指令,非常酷。

    继续来看 gf, * 是光标位置,右边是按下 gf 后的跳转。

    +-----------------------------------------------+----+-------------------------------------------+
    |                                   Pos*t.first | -> | app/models/post.rb                        |
    +-----------------------------------------------+----+-------------------------------------------+
    | has_many :c*omments                           | -> | app/models/comment.rb                     |
    +-----------------------------------------------+----+-------------------------------------------+
    | link_to 'Home', :controller => 'bl*og'        | -> | app/controllers/blog_controller.rb        |
    +-----------------------------------------------+----+-------------------------------------------+
    | <%= render 'sh*ared/sidebar' %>               | -> | app/views/shared/_sidebar.html.erb        |
    +-----------------------------------------------+----+-------------------------------------------+
    | <%= stylesheet_link_tag 'scaf*fold' %>        | -> | public/stylesheets/scaffold.css           |
    +-----------------------------------------------+----+-------------------------------------------+
    | class BlogController < Applica*tionController | -> | app/controllers/application_controller.rb |
    +-----------------------------------------------+----+-------------------------------------------+
    | fixtures :pos*ts                              | -> | test/fixtures/posts.yml                   |
    +-----------------------------------------------+----+-------------------------------------------+
    | layout :pri*nt                                | -> | app/views/layouts/print.html.erb          |
    +-----------------------------------------------+----+-------------------------------------------+
    | <%= link_to "New", new_comme*nt_path %>       | -> | app/controllers/comments_controller.rb    |
    +-----------------------------------------------+----+-------------------------------------------+
    

    显然,有了 Rails.vim, 我们将比 netbeans, eclipse, rubymine 它们快一个数量级的跳转速度.( 它们得用鼠标 )

    虽然已经简化到极致了,但 Rails.vim 还有更让我们舒服的 A, R 单指令,A 总是跳至测试文件,R 则相反,看下效果:

    +--------------------------+--------------------+-----------------------------+
    | * Current file           | Alternate file     | Related file                |
    +--------------------------+--------------------+-----------------------------+
    | * model                  | unit test          | schema definition           |
    +--------------------------+--------------------+-----------------------------+
    | * controller (in method) | functional test    | view                        |
    +--------------------------+--------------------+-----------------------------+
    | * template (view)        | functional test    | controller (jump to method) |
    +--------------------------+--------------------+-----------------------------+
    | * migration              | previous migration | next migration              |
    +--------------------------+--------------------+-----------------------------+
    

    OK, 标准化的目录跳转就这些。

    那么遇到非标准的目录我们该怎么办?

    也简单,来看看我为大家准备的新插件

  2. 非标准目录

    非标准目录 Rails.vim 提供的帮助并不大,但有了 ctrlp, 我们能继续赶超其他编辑器。

    我使用了 ctrlp 插件默认的配置,并增加了 ctrl+o 为打开最近打开文件列表的缓冲区。我们来看看实际例子。

    例如我安装了 angularjs 作为我的前端框架,生成了目录 app/assets/javascripts/angularjs/ 来作为它的控制器,我们想跳转过来,怎么办?

    试着在 vim 的命令模式输入 ctrl+p, OK, 打开了一个提示框,再输入 angularjs/admin_posts, 按下回车,即可。这其实就是类似于 sublime text, textmate 们的 ctrlp 快捷键嘛,嗯,对的。

    可以模糊搜索,记得使用 F5 来刷新新文件。通过这个加上 ctrl+6, 可以轻易的来回切换。

    但是,我们有时候需要来回在最近几个文件中切换,就算使用了 Rails.vim 也稍稍不爽,楼主有何高见。当然有,看第三点。

  3. 最近文件历史切换

    在计算机术语有一个 LRU 的名词,大家还记得吗?对的,最近缓冲区列表,我们 vim 党也有,很简单,别慌:

    配置好我的 vimrc 后,先随便用 Rails.vim 的 R 指令打开几个文件。然后在命令模式下输入 ctrl+o, 发现了什么?

    嗯,我们最近打开的文件列表,输入关键字搜索,ctrl+j 向下,ctrl+k 向下。回车选中。

    就这样,超级简单,对吧?比其他的编辑器好很多吧:)

    除此之外,有人想要一个文件列表,好办,输入命令 :NEDTree( 或者使用 F8 ), 马上出现了一个左树,使用 ctrl+w+w 切换过去吧。

    说到这里,我想补充一个好东西,以更沉重打击对手,不让对手喘息,那就是 vim-easymotion, 它是用来文件内快速短途跳转工具。我们不用鼠标,自然要发挥好键盘。

    在一个文件内,光标置至一个方法上,输入 ,,w( 对,两个逗号 ), 然后我们发现有些字母变色了,我们再次输入变色字母就非常准确的跳转光标过去了。

    同理,输入 ,,b 是向前跳 ( 很好记,w 是 vim 自带的向后跳一个单词,而 b 是相前,而逗号,什么,你在问为什么是逗号吗,你可以离开此文啦 ^-^ )

说了这么说,跳转指令差不多完工了,不过需要提一点的是 Rails.vim 实际上在新版本使用了 Exx 指令,而不是 Rxx, 不过,我还是喜欢 Rxx, 你可以自行将上面的 Rxx 脑补为 Exx.

创建与编辑文件

除了跳转,我们有时候需要直接编辑或创建文件,我们绝不会像某些伪 Geek 一样打开一个新的终端操作,对吧?

  1. 编辑

    很好,直接使用 R config/database.yml, 嗯嗯,打开了。也就是说 R 指令后面带上参数的话,就是相对 Rails.root 打开文件的。

    简单。

    那么,新建呢?

  2. 新建

    再输入 R config/database.yml.example 吧,发现已经新建了,试着 r config/database.yml 一下,直接打开另一个文件复制进来 ( 好难,嗯,老师告诉你这个不需要会)

    别忘了离开时保存即可。

    说到这里,补充一点,对于 Rview 这个指令,如果你在后面的参数带上了 .html.erb 或 .html.slim , 它会尝试帮你创建对应的空文件,很方便。(很常用)

    OK, 还有注释功能呢。

  3. 注释

    注释功能我们使用了 The-NERD-Commenter, 在任何文件中,先用虚拟行选中将被注释的行 ( 即 大写的 V ), 然后按下 ,cc, 然后看到没,已经被注释了,反之,则使用 ,cu 来反注释。当然,你还可以使用 vim 自带的 u 来撤消,ctrl+r 来重来。就这些,很简单吧。

  4. erb 编辑

    除此之外,如果我们还使用的老的 html.erb 的话,我推荐使用 sparkup 来写 html 标签,它与 zencoding (emmet) 非常像,但更简单一些,例如:

    打开 a.html.erb, 然后输入 div.class1, 按下 ctrl+e, 马上就变为 <div class='class1'>*</div>, 常开发 web 的人都知道,我就不献丑了。

不多不少,刚刚好,有人还喜欢用 supertab 之类的,我是非常不推荐,用好插入模式的 ctrl+pctrl+n 就足够文件补全了。

下面,我想再补充几个非常常用的 vim 指令。

vim 很有用的指令

  1. 文件内移动

    使用 ctrl+e, ctrl+y 来移动屏幕

    使用 :10 直接跳转至第 10 行

    使用 G, gg 分别跳至最后一行,与第一行

    使用 /xx 来搜索文件内容

  2. 从网页上复制回代码

    先使用 set paste 设置为粘贴模式,再粘贴就不会因为自动对齐代码而乱掉,再使用 set nopaste 来取消粘贴模式。

  3. 从 vim 里复制出来代码

    非常不好的消息是,vim 自带的 yy 无法直接 copy 出来,不过也不是,可以使用 :+y 来复制,这样就可以直接复制出来了。

    当然,使用 :+p 来将系统剪切板粘进 vim 中。

  4. 文件编辑

    插入模式除了 i 之外,还有几个: S 是删除当前行开始插入,C 是删除光标之后的内容并插入,s 是删除当前字符并插入。( 这几个都相当常用 )

    经常在一个单词中间想删除当前整个单词,不移动光标的情况下,使用 diw 来删除整个单词,其记忆方法是:删除行内单词。更多可见:surround.vim 这个插件的功能,在处理 css, html tag 时非常有用。

    随时使用 ctrl+pctrl+n 来自动补充。

    选中某几行,按下 = 来格式化代码

    使用 > 来向右移动选中的几行,< 向左。

  5. mark 跳转功能

    使用 ma 来标记某一行,然后可以放心查看其他行,随时使用 "a 来跳回,你可以使用 26 个寄存器 :)

附:vim 简洁哲学

  1. 不要过多映射单键

  2. 多使用 vim 默认的快捷键

  3. 尽量使用 buffer 而不是 tab

  4. 少用插件,除非你知道需要什么

广而告之

以此为目标,结合 Rails 开发所需要的高亮插件,我重新整理了我的 ruby-vimrc 配置,仅仅 for ruby 开发,大家如果是纯 Ruby on Rails 开发工程师,可以马上 fork 出去,自己用之和改之。

没有精力来整理一个像 on-my-zsh 这样猛的东西,但这个也很 Nice:)

记得,简洁而不简单,vim 不仅仅是一个命令行编辑器,它是我们的开发利器。

如果你发现此文对你有用,对我有更多兴趣,欢迎访问和订阅我的博客: http://yafeilee.me/

这个表格排不好版,大家可以试着在 pre 元素上加上

white-space: pre;
word-wrap: normal;

谢谢分享。easymotion 没有用过,你平时实际使用多不多?会不会比较耗资源?

#2 楼 @billy 不会,这几个都是轻量级插件。

那 easymotion 实际使用频率高吗?

另补充一点点:非标准目录如果常用,比如/services, /serializers, Rails.vim 可以在项目里自定义。下一个项目直接 copy 就可以了。Angular 貌似有一个类似 Rails.vim 的插件实现同样跳转,只在 Angular 内部。

#4 楼 @billy 我用的都不是 angularjs 的标准目录,所以还是 ctrlp 好很多。自定义的我很感兴趣,能否写个短文之类的~

上面的插件都是常用的,否则就被我去掉啦。

ctrlp 的模糊搜索准确度和 sublime 的 cmd+p 还是不能比啊,要到相同的文件时,ctrlp 似乎需要比 sublime 更多的输入

@lyfi2003 其实很简单的,就不写短文啦 :) 具体可以看这里https://github.com/tpope/vim-rails/blob/master/doc/rails.txt#L705

这个自定义 projection 好像是去年底才出来的,我之前也不知道,一直用的很老的版本。后来写 decorator 的测试发现跳转不方便于是重新看文档并更新。

它的选项很多,我自己觉得比较实用的还是非标准文件和测试之间的跳转。比如decorators/foo_decotrator.rb跳转到spec/decorators/foo_decorator_spec.rb。虽然可以分项目设置,但目前我就按文档直接设了几个全局的,比较方便。

@lufeihaidao 我把排序设成 MRU,用过几次后,多数情况下可以一键即出。

纯干货👍

#7 楼 @billy 看了下,不错的特性,不过有些复杂了~ 也就像你那样用简单特性比较靠谱

我 easymotion 还要再锻炼一下.......知道这货好但是总没用上...每次跳转就是 jjjjjWWWWW

rails route 源码分析很到位。。。。

#11 楼 @ruohanc 习惯下就好:) 很多插件都是自己用着各种重复的命令不爽了去找的:)

#7 楼 @billy ctrlp 有很大一个问题是,你输入一串字符串后,比如 test,它不是优先匹配整字符串,而是直接模糊搜索,搜出来的很多都是比如 t*est* 这种,而 sublime 搜出来的会已 test 整字符串为优先,其次才是模糊搜索的结果。ctrlp 可以修改搜索模式为正则,这样效果会稍微好一点,但是想模糊搜的时候又得切回去……还是不够智能啊

正,我也很常用一個就是Rcontroller xxx!Rmodel xxx! 回去繼續看看vim-easymotionvim-surround 😄 我之前說過的就是這個:https://github.com/carlhuda/janus 常用的都有,比較無腦一些:)

#15 楼 @lufeihaidao 可以排序为 MRU, 是可以的。其实我们主要用 Rails.vim 😄

#17 楼 @imlcl 不符合小而美啊:)

删除整个单词可以直接用 dw 啊,diw 有什么不一样。

#20 楼 @ichord dw 只能在单词开头删,diw 可以在任何单词位置,当然 di' 可以删 ' 号中间的所有的:)

直接用 janus 不是更好?

辛苦楼主了,其实简介 + 链接也行的。 我打算试验一下,看上去不错。我总是在 sublime 的目录里找来找去的,效率不高。

#23 楼 @chenge 工具类就是实践,光看没啥用:)

#22 楼 @wcc526 janus 太多东西了,不符合小而美的风格,相信用的人也没几个用它所有的组件。我就非常不适应 supertab, snipmate 之类的东西,而且把我喜欢的原生 vim 指令覆盖了很多。

#24 楼 @lyfi2003 janus 的东西确实有点过多了,但是安装很方便,我之前也自已定制过一个,后来还是转用 janus 了,楼主的这篇文章不错,赞一个。

#6 楼 @lufeihaidao 谢谢。这个很实用。比目录方便。 有了这个似乎又不想折腾 vim 了。 #24 楼 @lyfi2003 vim 还有什么明显的优势?

#26 楼 @chenge 你这问题就不好了,vim 两大优势人皆知:

  1. 在于不需要每次都动鼠标,所有操作都是键盘完成的。
  2. 支持命令行下完成,远程直接编辑,配合 tmux 是神器。

不过现在如果没 vim 基础的话就不建议用它了,用 sublime text 能节省很多学习成本,虽然后期效率 vim 还是高些。

#27 楼 @lyfi2003 sublime 也不需要鼠标吧。 sublime 学习更容易。更现代吧。

#28 楼 @chenge 那就不可能了,你怎么快速移动光标呢?还是鼠标吧

#29 楼 @lyfi2003 用鼠标没什么吧,还可以活动下手腕

注释我喜欢用 https://github.com/tomtom/tcomment_vim, 推荐楼主试试,不需要选中,直接 gcc,取消注释也是 gcc,各种语言支持得也很好,更新比 NERDCommenter 活跃。

#31 楼 @gonglexin 多谢推荐,个人还是习惯 NERDCommenter 一些,主要是只用 ,cc,cu. 注释单行同样不需要选中。这里有一个对比:http://stackoverflow.com/questions/4716810/tcomment-vs-the-nerd-commenter

@chenge 折腾一下 vim 还是有用的,因为你难免要到服务器上改文件,在服务器上肯定是 vim/emacs 好用一些。另外,因为 vim 用的人太多,基本上每个编辑器或 IDE 都会提供 vim 快捷键模式,这样即使你换了编辑器,也不需要另外记一套快捷键。

本地写代码的话没必要一定要用 vim,sublime 之类的已经很好了,基本上 cmd+p 和 cmd+r 足以解决大部分的跳转需求

#33 楼 @lufeihaidao 服务器用 nano 就可以吧。

谢谢你分享的 cmd-r,这个很方便。

无意引起纷争,不过下面应该都是事实。

附:Emacs 简洁哲学

把你常用的每一个键都映射到你最舒服的位置。

好吧,已经不怎么使用什么默认快捷键了。还有人用吗?

好吧,这点相同,尽量使用 buffer 而不是 tab.

不用插件也配称呼自己会用 Emacs ? 秀秀你的插件吧。(数十兆的插件也就刚刚入门)

#34 楼 @chenge

nano 够用了,如果不习惯,最多配一个 ~/.nanorc, 调成你喜欢的键位。

我忍不住说的啥吧:

这个帖子不是讨论工具好不好用和什么高大上的哲学的问题,而且讲工具怎么用的问题。请 @zw963 @chenge @lufeihaidao 回到正题上。

非常欢迎讨论如何更高效使用 vim 的内容,比如 @gonglexin @billy 给了我不错的建议。

刚刚开始学用 vim 写 rails 没多久,楼主贴子真是及时 😄 不过跟着贴子做的时候发现了一个小错误,set :paste 这里应该是set paste才对

#38 楼 @hntee 嗯,谢谢指正~

又学习了~

26 Bundle 'gmarik/vundle' 27 28 " My bundles here: 29 " original repos on GitHub 30 Bundle 'vim-ruby/vim-ruby' 31 Bundle 'tpope/vim-rails.git' 32 Bundle 'tpope/vim-endwise' 33 Bundle 'bling/vim-airline' 34 Bundle 'Lokaltog/vim-easymotion' 35 Bundle 'junegunn/vim-easy-align' 36 Bundle 'tomtom/tcomment_vim' 37 Bundle 'scrooloose/nerdtree' 38 Bundle 'kien/ctrlp.vim' 39 Bundle 'techlivezheng/vim-plugin-minibufexpl' 40 Bundle 'chrisbra/csv.vim' 41 Bundle 'scrooloose/syntastic' 42 Bundle 'airblade/vim-gitgutter' 43 Bundle 'majutsushi/tagbar' 44 Bundle 'kchmck/vim-coffee-script' 45 Bundle 'tpope/vim-surround' 46 "Bundle 'MarcWeber/vim-addon-mw-utils' 47 "Bundle 'tomtom/tlib_vim' 48 "Bundle 'garbas/vim-snipmate' 49 "Bundle 'Shougo/neocomplete' 50 "Bundle 'Shougo/neosnippet' 51 "Bundle 'Shougo/neosnippet-snippets' 52 Bundle 'othree/html5.vim' 53 Bundle 'pangloss/vim-javascript' 54 Bundle 'leshill/vim-json' 55 Bundle 'mattn/emmet-vim' 56 Bundle 'kshenoy/vim-signature' 57 Bundle 'gregsexton/MatchTag' 58 59 Bundle 'flazz/vim-colorschemes'

收了,记号

我是 Emacser 也是 Vimer。

以前常折腾这些配置,花了不少时间去整理、阅读各种插件的文档甚至源码。最后整下来发现越来越像别人做好的东西,比如 Vim 的 janus,Emacs 的 prelude。后来索性就用他们配置了,碰到想定制的东西就写到定制文件中。

用 Janus 和 Prelude 并不是偷懒,相反你需要经常关注他们的最新改动。我 Github 就分别 watch 了这两个 repo,这对自己使用和学习这些工具都有很大帮助。

#43 楼 @hbin 嗯 对,这也是我提供我的 vimrc 的一个目的。有些东西讲究大而全,有些习惯小而美。选择不同^_^

以前折腾了一段时间 vimperator 最后还是滚去用鼠标了 不过这个 easymotion 真是超级好用(:3 」∠)

#43 楼 @hbin janus 好卡啊,自己定制的感觉就好许多

#45 楼 @palytoxin 嗯~ 谁用谁知道^_^

#46 楼 @bluecoda

很多人都说 janus 卡,我觉得很奇怪,也许你可以学着去找下卡的原因。 就我所知,janus 有一个配置对于非 SSD 用户来说可能会觉得有卡顿现象。默认情况下,每次 focus 到 Vim 时,Janus 会自动刷一次 NERDTree,将以下这行配置放到 .vimrc.after 中可以解决这个问题 augroup! AuNERDTreeCmd

ctrl + 6 或 使用 vim 命令 :e#

匿名 #50 2014年05月20日

赞 上次看你操作的非常顺 羡慕。。。。

其实我用 ails.vim 比较多的是 Sxxx 和 Vxxx 指令,在几个文件中跳来跳去不如直接分屏编辑

#51 楼 @aptx4869 有 28 寸大屏的话就更方便了:)

要是录制成视频就更好了

#48 楼 @hbin nerdtree 不开会不会好点?我都是把 nerdtree 关了的,要时再调出来。

另外,之前一直是分屏,但由于屏太小,后来就加 tab,分屏用得少了,感觉还不错。 反正自己用得爽,感觉人与编辑器合一,随心所欲才是王道,这不就是 geek 精神么?

#48 楼 @hbin 非 SSD 么?从 2 年前开始用 vim 就是 SSD,之前是 G3,现在是 macbook air/retina,一直都卡。我的卡主要是因为Syntastic,尤其是在编辑比较大的haml文件时。当然,janus禁用掉这个插件也是个选择。不过我选择了自己配vim,把一些janus常用的mapping都搬过来了。

#48 楼 @hbin 另外,自己定制 vim 比 janus 有一个优势。我用的 vundle,在使用到什么插件的时候,很容易照搬,尤其在多台机上(比如我自己要参与使用的 3 台 vps)上非常容易照搬。janus 在这方面不如自己用 vundle 去做,因为据我所知,janus 要自己装插件都是 git clone 到.janus 目录去,要复制 vim 环境相当麻烦。

先收藏,有空再慢慢配置。

#57 楼 @wosuopu 你这头像不收藏不行啊:) 建议以后跟着实际操作一遍~

嘲讽一切 TextMate 之外的 😄

#59 楼 @huacnlee 当年因为 TextMate 买了 Mac, 后来,作者跑了,再后来,你们都知道啦 😄

我想说的是,IDE 也有快速跳转的快捷键。不要老拿鼠标当借口。

#61 楼 @dongbeta 不是作借口,设计理念就不同,IDE 文件内跳转离开鼠标基本上没法操作,而 vim, emacs 正是强项,话说你不看情景说话的?

@lyfi2003 总体很不错。写这么长也够辛苦的,不过有以下几点需要请教或者补充下:

  1. LRU 在 CtrlP 中是有的,CtrlP 模糊搜索不仅可以搜索路径,还可以只搜索文件名,这些切换通过 ctrl+f 便可切换。

  2. 关于注释,楼主可以试试 TComment,这个插件很好用

  3. 有关粘贴复制的问题

    从 vim 里复制出来代码 非常不好的消息是,vim 自带的 yy 无法直接 copy 出来,不过也不是,可以使用 :+y 来复制,这样就可以直接复制出来了. 当然,使用 :+p 来将系统剪切板粘进 vim 中。

刚才试了,怎么不行呢?还是无法将外面的内容复制到 vim 中,或者将 vim 中的内容复制到外面。我一直的做法是通过鼠标选中,然后复制或者粘贴出去的

#63 楼 @xautjzd 谢谢,LRU 我用的就是 CtrlP 的映射:) 不过 ctrl+f 快速切换搜索类型非常好~

复制粘贴操作是:

  1. 先用 V 选中几行
  2. 依次按 : + y
  3. vim 提示复制成功

已经复制到系统剪切板了。

#64 楼 @lyfi2003 额,我这还是不行,选中后:+y复制提示xx lines yanked。这和 vim 内复制成功的提示也一样吧。但是我再切换到浏览器中粘贴,内容还是没过来

#65 楼 @xautjzd 注意是 + 不是 =, 你可以再试下,如果还不行,可能被你的插件映射了其他按键,可以考虑自己映射一个更简单的按键。

#66 楼 @lyfi2003 嗯,我试过了,也查了下+是 clipboard 的 register,但还是复制不进去,配置中也没映射其他键的,我再看看吧

@lyfi2003 您好,请问你的:registers中有+寄存器没?刚才查找资料过程中,貌似好像 + 寄存器只存在于 GUI 的 vim 中,我目前用的 vim 不是 GUI 版本的,所以在寄存器列表中找不到对应的 + 寄存器,所以可能没法使用。

#68 楼 @xautjzd 我也是命令行的 vim, 是有的,你也许需要设置一下剪切板的名字:

set clipboard=unnamed 再试一下。more: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

#69 楼 @lyfi2003 谢谢。这篇文章我已经参考过。 set clipboard=unnamed 或者set clipboard=unnamedplus只是将复制或者删除的内容默认存放到而 unnamed 寄存器中而已,这不是关键。貌似是因为我的 vim 版本默认没有将clipbard编译进来。你试试:echo has("clipboard"),看看有没有安装 clipboard。我这边测试没安装,所以不会存在+ register

参考:

  1. http://vim.wikia.com/wiki/Accessing_the_system_clipboard
  2. http://stackoverflow.com/questions/11489428/how-to-make-vim-paste-from-and-copy-to-systems-clipboard

#70 楼 @xautjzd 估计你找到原因了,我这里显示是 1.

#71 楼 @lyfi2003 嗯,这就是原因了,1 表示安装过,0 表示没有,在上面附着的第二个链接中提到过。请问你是 Linux 还是 Mac 环境?Vim 是通过源码编译安装还是通过命令安装?

#72 楼 @xautjzd Mac 系统,自带的都可以,我现在是用 brew 安装的 7.4.

#73 楼 @lyfi2003 嗯,可能环境不同预编译的包不同吧,我用的是 Fedora,估计预编译包时没将 clipboard 编译进去,非常感谢您

复制(这行是直接在 vim ctrl+c 复制出来的):

vno <C-C> "+y

粘帖:

function TogglePaste()
    if &paste
        set nopaste
    else
        set paste
    endif
endfunc
nno <F7> :call TogglePaste()<cr>

nno <S-F7> "*p

绑定到普通模式 shitf F7 而不是不绑到 ctrl+v 的原因你们应该都懂的……

@lyfi2003 LZ, 请问如何实现 自动补全" "do end 呢?之前用 janus 自动补全和提示还是非常方便的。

#77 楼 @springwq 你可以尝试安装 (vim-snipmate)[https://github.com/garbas/vim-snipmate]) 来解决这个问题,我之前用过一段时间这个特性,感觉不好,去掉了。

请问,怎么在 windows 上给 vim 装 sparkup 这个插件啊?

#79 楼 @beslowhttps://github.com/rstacruz/sparkup 看看,很久不在 windows 下开发了

a-wing 讨论在 Vim 里开发 Ruby 时,Vim 插件的选择 提及了此话题。 09月03日 13:45
wsdjeg 讨论在 Vim 里开发 Ruby 时,Vim 插件的选择 提及了此话题。 09月03日 14:08
需要 登录 后方可回复, 如果你还没有账号请 注册新账号