我听说过很多关于Vim的事,包括优点和缺点。 (作为一名开发人员)使用Vim确实应该比使用其他任何编辑器都要快。 我用Vim来做一些基本的事情,我用Vim最多只能减少10倍的效率。

当你谈论速度时,只有两件事你应该关心(你可能不够关心,但你应该关心):

左右交替使用的 用手是最快的方法 键盘。 永远不要碰鼠标 第二种方法是尽可能快。 你要花很长时间才能移动你的手, 抓住鼠标,移动它,把它带来 回到键盘上(你经常这样做 看看键盘,确保你 将你的手正确地回到正确的位置)

下面的两个例子说明了为什么我使用Vim效率低得多。

复制/剪切和粘贴。我一直都这么做。在所有当代编辑器中,你用左手按Shift键,用右手移动光标来选择文本。然后按Ctrl+C复制,移动光标,按Ctrl+V粘贴。

Vim的情况很糟糕:

Yy复制一行(你几乎不需要整行!) [number xx]yy复制xx行到缓冲区。但你永远不知道你是否选择了你想要的。我经常要做[number xx]dd然后u来撤销!

另一个例子吗?搜索和替换。

在PSPad中:按Ctrl+f,然后输入你想要搜索的内容,然后按Enter。 在Vim: /中,然后输入你想要搜索的内容,然后如果有一些特殊字符,在每个特殊字符前放\,然后按Enter。

Vim的一切都是这样的:似乎我不知道如何正确处理它。

注:我已经读了Vim小抄:)

我的问题是:

与当代编辑器相比,您使用Vim的哪些方式使您的工作效率更高?


当前回答

你使用Vim的方式是什么 你比带着一个更有效率 当代编辑?

能够执行复杂的,重复的编辑与很少的击键(通常使用宏)。看看VimGolf,见证Vim的力量!

经过十多年几乎每天的使用,很难想象使用任何其他编辑器。

其他回答

维姆插件

这里有很多很好的答案,其中一个关于vi的禅意的答案令人惊讶。我没有看到提到的一件事是vim可以通过插件进行极大的扩展。有脚本和插件可以让它做原作者从未考虑过的各种疯狂的事情。下面是一些非常好用的vim插件的例子:

rails.vim

Rails。Vim是tpope编写的插件。对于从事rails开发的人来说,这是一个不可思议的工具。它做了一些神奇的上下文敏感的事情,允许您轻松地从控制器中的方法跳转到相关视图,再跳转到模型,再向下跳转到该模型的单元测试。它为rails开发人员节省了数十甚至数百个小时的时间。

gist.vim

这个插件允许你在视觉模式下选择一个文本区域,然后输入一个快速命令将其发布到gi.github.com。这允许简单的pastebin访问,如果你通过IRC或IM与某人合作,这是非常方便的。

space.vim

这个插件为空格键提供了特殊的功能。它把空格键变成类似于周期的东西,但它不是重复动作,而是重复运动。这对于以动态定义的方式快速浏览文件非常方便。

surround.vim

这个插件使您能够处理以某种方式分隔的文本。它给出的对象表示括号内的东西,引号内的东西,等等。它可以在操作带分隔符的文本时派上用场。

supertab.vim

这个脚本为vim带来了花哨的选项卡补全功能。在vim的核心中已经有了自动完成的东西,但是这使它变成了一个快速的选项卡,而不是多个不同的多键快捷键。非常方便,而且使用起来非常有趣。虽然它不是VS的智能感知,但它是一个伟大的步骤,并带来了大量您希望从选项卡补全工具中期望的功能。

syntastic.vim

该工具将外部语法检查命令引入vim。我个人没有使用过它,但我听说过关于它的很棒的东西,而且它的概念很难被超越。无需手动检查语法可以极大地节省时间,并且可以帮助您在引入语法错误时捕获它们,而不是在最终停止测试时捕获它们。

fugitive.vim

从vim内部直接访问git。同样,我没有使用过这个插件,但我可以看到实用程序。不幸的是,在我所处的文化中,svn被认为是“新”的,所以我在很长一段时间内不太可能在工作中看到git。

nerdtree.vim

用于vim的树浏览器。我最近开始用这个,真的很方便。它可以让您在垂直分割中放置树视图,并轻松打开文件。这对于一个经常在许多源文件之间切换的项目非常有用。

FuzzyFinderTextmate.vim

这是一个未维护的插件,但仍然非常有用。它提供了使用“模糊”描述性语法打开文件的能力。这意味着在一个稀疏的文件树中,您只需要输入足够的字符来消除您感兴趣的文件与其余杂乱文件的歧义。

结论

有许多令人难以置信的工具可用于vim。我确信我在这里只触及了表面,寻找适用于您的领域的工具是非常值得的。结合了传统vi强大的工具集,vim的改进,以及进一步扩展vim的插件,它是有史以来最强大的编辑文本的方法之一。Vim与emacs、eclipse、visual studio和textmate一样强大。

谢谢

感谢duwanis的vim配置,从中我学到了很多,并借鉴了这里列出的大部分插件。

我经常使用的另一个有用的vi快捷方式是“xp”。这将把光标下的字符与下一个字符交换。

还有更多的捷径吗?

输入你的。vimrc: nnoremap;:

这样进入命令模式更容易: q或者w功,而不是q或者w功。

两个按键而不是三个,你会经常需要这个。


对系统管理员来说是不好的,因为他们需要开箱即用的相同功能在每个地方的每个盒子上都是相同的。

但是对于使用vi的程序员来说是一个巨大的改进。

前几天我刚刚发现Vim的全功能完成,虽然我承认我有点模糊,但我已经获得了令人惊讶的好结果,只是混合Ctrl + x Ctrl + u或 Ctrl + n/Ctrl +p插入模式。这不是智能感知,但我还在学习。

试试吧!:帮助ins-completion

一些提高效率的技巧:

智能运动

*和#在向前/向后光标下搜索单词。 W到下一个单词 W到下一个空格分隔的单词 B /e到当前单词的开头/结尾。(B / E只代表空格) gg / G跳转到文件的开始/结束。 %跳转到匹配{..}或(..)等. . {/}跳转到下一段。 ”。跳转回上次编辑的行。 g;跳回上次编辑的位置。

快速编辑命令

我在开头插入。 end的附加语句。 o / o打开一个新的行后/前电流。 v / v / Ctrl+ v可视模式(选择文本!) Shift+R替换文本 C更改剩余部分行。

结合命令

大多数命令接受数量和方向,例如:

改变直到单词结束 改变3个单词 BcW =开始全字,更改全字 ciW =改变内心的词。 Ci " =改变内部之间的".." Ci(=更改文本之间(..) Ci < = change text between < ..>(需要在vimrc中设置匹配对+=<:>) 4dd =删除4行 3x =删除3个字符。 3s =替换3个字符。

有用的程序员命令

R替换一个字符(例如rd用d替换当前字符)。 ~改变情况。 J连接两条线 Ctrl+A / Ctrl+X增加/减少一个数字。 . 重复最后一个命令(一个简单的宏) ==修复行缩进 >缩进块(可视模式下) < unindent block(在可视模式下)

宏录制

按q[键]开始录音。 然后按q键停止录制。 宏可以使用@[key]播放。

通过使用非常特定的命令和动作,VIM可以为下一行重新播放这些确切的动作。(例如A表示尾尾,b / e表示将光标移动到单词的开头或结尾)

良好设置的示例

# reset to vim-defaults
if &compatible          # only if not set before:
  set nocompatible      # use vim-defaults instead of vi-defaults (easier, more user friendly)
endif

# display settings
set background=dark     # enable for dark terminals
set nowrap              # dont wrap lines
set scrolloff=2         # 2 lines above/below cursor when scrolling
set number              # show line numbers
set showmatch           # show matching bracket (briefly jump)
set showmode            # show mode in status bar (insert/replace/...)
set showcmd             # show typed command in status bar
set ruler               # show cursor position in status bar
set title               # show file in titlebar
set wildmenu            # completion with menu
set wildignore=*.o,*.obj,*.bak,*.exe,*.py[co],*.swp,*~,*.pyc,.svn
set laststatus=2        # use 2 lines for the status bar
set matchtime=2         # show matching bracket for 0.2 seconds
set matchpairs+=<:>     # specially for html

# editor settings
set esckeys             # map missed escape sequences (enables keypad keys)
set ignorecase          # case insensitive searching
set smartcase           # but become case sensitive if you type uppercase characters
set smartindent         # smart auto indenting
set smarttab            # smart tab handling for indenting
set magic               # change the way backslashes are used in search patterns
set bs=indent,eol,start # Allow backspacing over everything in insert mode

set tabstop=4           # number of spaces a tab counts for
set shiftwidth=4        # spaces for autoindents
#set expandtab           # turn a tabs into spaces

set fileformat=unix     # file mode is unix
#set fileformats=unix,dos    # only detect unix file format, displays that ^M with dos files

# system settings
set lazyredraw          # no redraws in macros
set confirm             # get a dialog when :q, :w, or :wq fails
set nobackup            # no backup~ files.
set viminfo='20,\"500   # remember copy registers after quitting in the .viminfo file -- 20 jump links, regs up to 500 lines'
set hidden              # remember undo after quitting
set history=50          # keep 50 lines of command history
set mouse=v             # use mouse in visual mode (not normal,insert,command,help mode


# color settings (if terminal/gui supports it)
if &t_Co > 2 || has("gui_running")
  syntax on          # enable colors
  set hlsearch       # highlight search (very useful!)
  set incsearch      # search incremently (search while typing)
endif

# paste mode toggle (needed when using autoindent/smartindent)
map <F10> :set paste<CR>
map <F11> :set nopaste<CR>
imap <F10> <C-O>:set paste<CR>
imap <F11> <nop>
set pastetoggle=<F11>

# Use of the filetype plugins, auto completion and indentation support
filetype plugin indent on

# file type specific settings
if has("autocmd")
  # For debugging
  #set verbose=9

  # if bash is sh.
  let bash_is_sh=1

  # change to directory of current file automatically
  autocmd BufEnter * lcd %:p:h

  # Put these in an autocmd group, so that we can delete them easily.
  augroup mysettings
    au FileType xslt,xml,css,html,xhtml,javascript,sh,config,c,cpp,docbook set smartindent shiftwidth=2 softtabstop=2 expandtab
    au FileType tex set wrap shiftwidth=2 softtabstop=2 expandtab

    # Confirm to PEP8
    au FileType python set tabstop=4 softtabstop=4 expandtab shiftwidth=4 cinwords=if,elif,else,for,while,try,except,finally,def,class
  augroup END

  augroup perl
    # reset (disable previous 'augroup perl' settings)
    au!  

    au BufReadPre,BufNewFile
    \ *.pl,*.pm
    \ set formatoptions=croq smartindent shiftwidth=2 softtabstop=2 cindent cinkeys='0{,0},!^F,o,O,e' " tags=./tags,tags,~/devel/tags,~/devel/C
    # formatoption:
    #   t - wrap text using textwidth
    #   c - wrap comments using textwidth (and auto insert comment leader)
    #   r - auto insert comment leader when pressing <return> in insert mode
    #   o - auto insert comment leader when pressing 'o' or 'O'.
    #   q - allow formatting of comments with "gq"
    #   a - auto formatting for paragraphs
    #   n - auto wrap numbered lists
    #   
  augroup END


  # Always jump to the last known cursor position. 
  # Don't do it when the position is invalid or when inside
  # an event handler (happens when dropping a file on gvim). 
  autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \   exe "normal g`\"" | 
    \ endif 

endif # has("autocmd")

设置可以存储在~/中。Vimrc,或在/etc/vimrc.系统范围Local,然后从/etc/vimrc文件中读取:

source /etc/vimrc.local

(为了使它在VIM中工作,您必须将# comment字符替换为“”,我想在这里给出正确的语法高亮显示)。

我在这里列出的命令都是非常基本的,也是到目前为止我使用的主要命令。它们已经让我变得更有效率,而不需要知道所有花哨的东西。