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

lyfi2003 · 发布于 2014年05月16日 · 最后由 lyfi2003 回复于 2014年06月11日 · 10963 次阅读
121
本帖已被设为精华帖!

( 排版好累, 差不多了 )

前言

很久之前, 写完一篇 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/

共收到 80 条回复
121

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

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

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

121

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

11222

那easymotion实际使用频率高吗?

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

121

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

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

3840

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

11222

@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,用过几次后,多数情况下可以一键即出。

115

纯干货👍

121

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

96

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

9800

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

121

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

5259

收了

3840

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

8807

好贴!

4584

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

121

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

121

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

818

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

121

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

96

直接用janus不是更好?

4215

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

121

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

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

96

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

4215

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

121

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

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

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

4215

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

121

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

4215

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

20

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

121

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

3840

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

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

4215

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

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

1031

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

附: Emacs 简洁哲学

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

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

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

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

1031

#34楼 @chenge

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

121

我忍不住说的啥吧:

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

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

12135

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

121

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

1674

又学习了~

2511

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'

6123

收了,记号

2746

我是 Emacser 也是 Vimer。

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

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

121

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

96

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

D77582

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

121

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

2746

#46楼 @bluecoda

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

160

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

7307

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

96

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

121

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

5196

要是录制成视频就更好了

4584

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

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

D77582

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

D77582

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

9618

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

121

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

De6df3

嘲讽一切 TextMate 之外的 😄

121

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

8775

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

121

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

4920

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

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

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

  3. 有关粘贴复制的问题

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

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

121

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

复制粘贴操作是:

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

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

4920

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

121

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

4920

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

4920

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

121

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

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

4920

#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
121

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

4920

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

121

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

4920

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

96

复制(这行是直接在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的原因你们应该都懂的……

4898

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

121

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

96

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

121

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册