例如,假设我真的只想向上或向下移动一行。由于禁用了
j
和k
,因此我不确定有更好的替代方法。我想将一个或两个字符左右移动时遇到相同的问题。有谁知道如何取代这些类型的机芯?
这是我正在使用的插件:https://github.com/wikitopian/hardmode。
#1 楼
这些只是vim可以执行的动作中的一部分,这些应该让您立即行动。使用Vim的内置帮助
navigation
或更高版本上的功能在Google中搜索
usr_03.txt
用/导航到单词
转到此处所有正确的动作
运动
有很多绕过vim的方法,我列出了通过搜索
vim advanced movements
找到的一些方法,还有一些我一直使用的方法。我确定您知道其中大多数,但我认为您也需要特别注意的是导航一词。这里有一些允许在行内导航。
vim advanced movements
–转到当前行的开头。0
–转到该行的第一个非空白字符。^
–转到当前行的末尾。$
–转到该行的最后一个非空白字符。用单词导航会很有帮助。为了更详细,您应该使用以下单词来导航单词:
g_
–转到当前单词的末尾。e
–移至当前WORD的末尾。E
–移至上一个(before)字。 br /> b
–转到下一个单词。B
–转到下一个单词。一个单词由字母,数字和
下划线。
单词由一系列由空格分隔的非空白字符组成。
words | WORDS也可能会根据您的vim设置而变化。
显示示例单词和单词之间的区别
w
是单个单词。W
是七个单词。搜索动作也非常有用。
192.168.1.1
–搜索一个模式,它将带您进入下一次出现的192.168.1.1
/pattern
将带您进入光标下方的pattern
的下一个匹配项。n
–搜索将要匹配的模式您将带您到上一个出现的pattern
。?pattern
将带您到光标上方的pattern
的下一个匹配项。N
–转到光标下当前单词的下一个出现。pattern
–转到光标下当前单词的上一个出现。*
–转到匹配的花括号或代码内的括号。您甚至可以在从命令行打开vim之前执行以下操作
#
允许您转到打开文件后,将其移至文件的第N行。%
Vim +N filename
在出现vim +10 /etc/passwd
的情况下将文件打开到第一行。在下面的示例中,vim将打开README文件并跳至单词“ install”的第一个匹配项。Vim +/pattern filename
pattern
打开文件至最后一个匹配项vim +/install README
。在下面的示例中,它将打开README文件并跳转到单词“ bug”的最后一次出现。Vim +?patten filename
#2 楼
作为硬模式的替代方法,下面的代码片段将允许您正常使用h
,j
,k
和l
,但是当它们快速连续使用时,会发出蜂鸣声警告您。function! s:BeepOnRepeat(key)
let count1 = v:count1
if !exists('s:last_time')
let s:last_time = reltime()
let s:repeat_count = 1
else
" increment the repeat count if `h`, `j`, `k`, or `l` was pressed
" within the last second, otherwise reset it
let now = reltime()
if str2float(reltimestr(reltime(s:last_time, now))) < 1
let s:repeat_count += 1
else
let s:repeat_count = 1
endif
let s:last_time = now
" produce an audible beep if a sequence of `h`, `j`, `k`, and/or `l`,
" greater than three, was pressed (within the repeat count time limit)
if s:repeat_count > 3
let savebelloff = &belloff
let savevisualbell = &visualbell
let &belloff = ''
let &visualbell = 0
execute "normal! \<Esc>"
let &belloff = savebelloff
let &visualbell = savevisualbell
endif
endif
execute 'normal! ' . count1 . a:key
endfunction
nnoremap <silent> h :<C-u>call <SID>BeepOnRepeat('h')<CR>
nnoremap <silent> j :<C-u>call <SID>BeepOnRepeat('j')<CR>
nnoremap <silent> k :<C-u>call <SID>BeepOnRepeat('k')<CR>
nnoremap <silent> l :<C-u>call <SID>BeepOnRepeat('l')<CR>
有关限制
hjkl
使用的另一种方法,请参见vim-molasses。#3 楼
另一种方法是使用中等模式,该模式仍会尝试学习“正确的动作”,但这样做的严格程度较低: br />不能完全禁用它们。默认情况下,中等模式将仅允许连续两个字符方向的动作。
#4 楼
我遇到了同样的问题,然后输入了:help hardmode
Lo,然后发现我发现了'g:HardMode_level' If set to 'wannabe'
arrow keys disabled, but not hjkl etc.
我是vim初学者之一,发现此插件非常有用,因为它确实把我从老鼠身上推开。
评论
多么愚蠢的插件!使用任何有效的方法。我非常同意romainl的观点:学习如何在文件中进行有效导航是一件好事,但对自己强加这种插件并不是不必要的痛苦。仍然您可能会对我在这里的回答感兴趣(更确切地说是关于/和?的部分。
在此,我谨不同意statox和romainl。直接导航到要更改的目标可以极大地提高整体效率。是的,虽然这样一开始可能会使您放慢速度,但从长远来看,您将使用更好的导航来弥补失去的时间。
实际上,@ Archangel33我认为对于hjkl以外的其他方法进行更精确的导航是一件好事,我们对此持有相同的看法。我不赞成的是插件本身:在我看来,最好一次学习一次导航的新方法(您不能同时学习所有方法),而在学习过程中使用令您沮丧的插件不是必要。话虽如此,这只是我的意见:有人有权不同意:-)
@Alex的确,我的评论只是我的个人观点,我永远不会认为我拥有唯一且通用的解决方案,这就是为什么我的最后一句话是那句话。那只是我的观点:有人有权不同意。现在,争论可能是无止境的:当然有些人会从这种插件中受益,而它只会使其他插件受挫并损害他们的学习。如果您想谈论它,我很乐意在聊天中与您讨论,但是我们不应该在这种辩论中对问题的评论进行垃圾评论:-)