在插入模式在Vim中,有没有什么办法来遍历文本移动一些字符向前和向后除了使用箭头键?
如果我按H,J,K和L,而在插入模式,实际的字符被打印在屏幕上,而不是通过在文本上移动。
我做它此刻的方法是不必诉诸按Ctrl + [(ESC)和遍历文本即可; 但显然这不是生产力。
在插入模式在Vim中,有没有什么办法来遍历文本移动一些字符向前和向后除了使用箭头键?
如果我按H,J,K和L,而在插入模式,实际的字符被打印在屏幕上,而不是通过在文本上移动。
我做它此刻的方法是不必诉诸按Ctrl + [(ESC)和遍历文本即可; 但显然这不是生产力。
你似乎滥用VIM,但是这可能是因为不是很熟悉它。
正确的方法是按下Esc键 ,去你想要做小幅盘整,修复它,回去继续编辑。 因为Vim已经超过了平时的性格变得更多运动前进/后退/上/下它是有效的。 当你了解更多的人,会出现这种情况,以提高工作效率。
这里有一对夫妇的使用情况:
但是,如果你还想做小文遍历无需离开插入模式,遵循rson的建议并使用Ctrl + O。 作为一个例子, 按Ctrl + 华氏度 + F将您移动到前面f
性格,让你在插入模式。
而在插入模式 ,使用Ctrl O操作进入正常模式只是一个命令:
CTRL-O h move cursor left
CTRL-O l move cursor right
CTRL-O j move cursor down
CTRL-O k move cursor up
这可能是你想要做什么最简单的方法,很容易记住。
在插入模式等非常实用的控制键:
CTRL-W delete word to the left of cursor
CTRL-O D delete everything to the right of cursor
CTRL-U delete everything to the left of cursor
CTRL-H backspace/delete
CTRL-J insert newline (easier than reaching for the return key)
CTRL-T indent current line
CTRL-D un-indent current line
这将消除许多浪费切换回正常模式。
尽管有什么帕维尔Shved 说 -这可能是更明智的习惯大法坪Esc键插入模式-这里是设置映射插入模式中快速导航的例子:
" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l
这将使Alt + H 键在插入模式去一个字符左,Alt键 + J降等,类似于到h J K L在正常模式下。
你必须代码复制到你的vimrc文件把它加载每次启动VIM(您可以通过键入打开时间:new $myvimrc
在普通模式开始)。
由于Alt修饰键没有映射(对一些重要的事情)在默认情况下,你可以以同样的方式拉其他(或全部)功能,在普通模式下插入模式。 例如:
移动到当前字使用Alt + B的开头:
inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w
值得一提的是,有可能是Alt键更好的使用比复制正常模式下的行为:比如这里有复制映射从相邻行从当前列到行的结尾部分:
" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e>
\<Esc>
\jl
\y$
\hk
\p
\a
" Insert the rest of the line above the cursor.
" Mnemonic: Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y>
\<Esc>
\kl
\y$
\hj
\p
\a
(我使用\
续行和缩进,以增加清晰度-命令被解释为如果写在一行上。)
CTRL-H delete the character in front of the cursor (same as <Backspace>)
CTRL-W delete the word in front of the cursor
CTRL-U delete all characters in front of the cursor (influenced by the 'backspace' option)
(有插入模式运动没有显着内置的热键)。
参考: :help insert-index
这组映射使得上Alt + hjkl 移动在命令行可供选择:
" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>
另外,这些映射添加动作都插入模式和命令行模式一气呵成:
" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>
拉普通模式的映射命令, 命令的命令行模式看起来有点从插入模式映射命令不同(因为命令行模式缺乏插入模式的按Ctrl + O):
" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'
cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'
CTRL-B cursor to beginning of command-line
CTRL-E cursor to end of command-line
CTRL-F opens the command-line window (unless a different key is specified in 'cedit')
CTRL-H delete the character in front of the cursor (same as <Backspace>)
CTRL-W delete the word in front of the cursor
CTRL-U delete all characters in front of the cursor
CTRL-P recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N recall next command-line from history (that matches pattern in front of the cursor)
<Up> recall previous command-line from history (that matches pattern in front of the cursor)
<Down> recall next command-line from history (that matches pattern in front of the cursor)
<S-Up> recall previous command-line from history
<S-Down> recall next command-line from history
<PageUp> recall previous command-line from history
<PageDown> recall next command-line from history
<S-Left> cursor one word left
<C-Left> cursor one word left
<S-Right> cursor one word right
<C-Right> cursor one word right
<LeftMouse> cursor at mouse click
参考: :help ex-edit-index
如果你是一个纯粹的VIM,跳过下面的答案。 OTOH,如果你是新的VIM,并正在寻找一些有用的提示你在Vim教程和博客的好几百不会找到,阅读... :-)
这是2014年,和人谁是最近才回到vim
我能提供的视图和提示一些,可能逆势而上,点。
虽然重复是vim的一个强大的概念,我(个人)觉得奇怪的是使用它或者强迫我来算(行,字,词等)或进行猜测。 我的大脑通常的工作原理是:“我希望光标那里 ”,而不是像“我希望光标_5_words_to_the_left_”。 很快能够移动光标,并直观地观察插入点这种方式可以让我保持我的脑海里什么我编辑,而不必计算我需要多少跳做出去的地步,我需要修改。
...浏览文本的大型机构。
大多数(全部)现代计算机有密切的键盘(如MacBook笔记本)集成触摸板 。 工业设计师们花了很多人年优化这些设计使得具有移动手离开键盘的老问题不再是一个真正的问题。 好吧,这是,如果你使用鼠标和不喜欢切换,但对于任何新VIM(像那些可能会发现通过搜索这篇文章),这不应该是太大的问题。
启用鼠标,点击并拖动具有切换到视觉模式和标记的区域为粘贴的效果。
使用鼠标(轮)左右滚动,然后单击定位光标(杜)只是工作。 见http://usevim.com/2012/05/16/mouse/更多关于这一点。
这些是根据输入的喜好我会打电话给更多的现代(使用鼠标,滚轮等)在vim导航的方式,同样有效。
HTH
很多人在Vim的社区认为你不应该在插入模式下浏览,这不是Vim的方式。 我认为这是一个不正确的情绪从标准的编辑器Vim的过渡时的经验教训。
当你使用它的工具来创建原子,重复的动作或者发现的Vim是最强大的。
这是确定的,如果你是固定你在相同的插入会犯了一个错误插入模式下浏览时。 你不应该浏览文本的修改过的范围之外。
如果你犯了一个错误,同时输入文本和逃出插入模式来解决它,你将不能够重复预定的动作, .
将重复校正。
Vim也支持许多插入模式导航键。 显然,有箭头键,Home和End,但也有许多其他的快捷方式。 参见:h ins-special-keys
。
在gVim的,你可以使用鼠标。 但说实话,有什么错误使用箭头键? 还有一个原因,为什么他们是在键盘上。
要在插入模式好一点的导航,为什么不映射某些键?
imap <C-b> <Left>
imap <C-f> <Right>
imap <C-e> <End>
imap <C-a> <Home>
" <C-a> is used to repeat last entered text. Override it, if its not needed
如果你能解决让你的终端Meta键的工作,你可以模拟emacs模式更好。 在正常模式下的导航是更好的方式,但对于较短的运动有助于保持在插入模式。
对于较长的跳跃,我更喜欢下面的默认翻译:
<Meta-b> maps to <Esc><C-left>
这转变为正常模式 ,并回到一个字
我相信,Home和End(和上一页 / PageDn)也通常在插入模式下工作,但除此之外,我不相信有文字遍历定义的任何其他标准键。
您可以创建在插入模式下工作的映射。 做到这一点的方式是通过inoremap。 注意“我”在命令的开始(noremap是避免密钥映射碰撞有用)。 推论是用于“正常”模式“N”。 你可以猜测什么VIM认为是“正常的”;)
但是,你真的想使用文本“正常”模式,方便浏览。 Vim的是超在这种事情和所有的功率可从正常模式。 Vim中已经提供了简便的方法从正常模式去插入模式(例如,I,I,A,A,O,O)。 诀窍是可以很容易地进入正常模式。 要做到这一点的方法是重新映射逃生更关键的无限便捷。 但你需要一个不会与正常打字冲突。 我用:
inoremap jj <Esc>
由于JJ(这是2 J的输入对方后迅速之一)似乎并没有出现在我的词汇量。 其他的将重新映射到它的舒适。
我会让对方本质的变化就是改用我的键盘上的CAPSLOCK和控制键(使用主机电脑的键盘配置),因为我几乎从来不使用大写锁定,它有,我想它是又大又漂亮右。 (此为Emacs用户是常见的。缺点是当你发现自己的“不固定”键盘上的!Aaarggh!)
一旦你重新映射CAPSLOCK,你可以舒适地使用下面的插入模式重新映射:
某些键在插入模式已经映射牢记(向后杀字是CW(控制-W)默认情况下,你可能已经有您想要的绑定。也就是说,我宁愿章所以在我的.vimrc我有:
inoremap <C-h> <C-w>
但你可能要在正常模式下的相同肌肉记忆痉挛,所以我也映射为章:
nnoremap <C-h> db
(d)elete(B)ackwards完成使用相同的密钥和弦同样的事情。 这种快速编辑的是,我觉得有用的实践错别字。 但坚持到正常模式文本和什么比杀死前一个单词多走动。 一旦你进入改变模式(当然,使用重映射)的习惯,它会比重新映射插入模式更有效。
很抱歉,但VIM不工作的方式。
您应该切换到“正常”模式下,导航,然后回去再重新插入。
你可以使用imap
在插入模式下任意键映射到一个光标键。 像这样:
imap h <Left>
现在^ h就像在正常模式下,移动光标。 (采用此方法映射h是显然是一个不错的选择)
说了这么多,我不认为在使用VIM文本走动的标准方式是“不生产”。 有很多非常强大的穿越在正常模式下的文本的方法(如用W和B,或/和?,或F和F等)
对于一些经常使用的移动和动作,我已经定义了以下映射。 这样可以节省一次击键相比CTRL + O组合,因为我需要他们经常,他们在支付从长远来看。
inoremap <A-$> <C-o>$
inoremap <A-^> <C-o>^
inoremap <A-h> <Left>
inoremap <A-l> <Right>
inoremap <A-O> <C-O>O
inoremap <A-o> <C-o>o