在vim中突出显示f键搜索
通常,当我使用在vim中突出显示f键搜索,vim,Vim,通常,当我使用f搜索当前行中的字符时,我会遇到比预期更多的字符出现,因此突出显示每个搜索匹配会很好 在下面的例子中,假设我从一行的开头开始,试图用元音到达e。突出显示这些事件中的每一个将是有帮助的,这样我就可以获得一些关于按下次数的上下文信息在初始搜索之后 # Here is a comment with a lot of vowels and I have passed it now Vim当前的f实现如何知道如何只等待一个字符而不是换行? 我更愿意覆盖内置的f功能,因此我使用了类似于此的重
f
搜索当前行中的字符时,我会遇到比预期更多的字符出现,因此突出显示每个搜索匹配会很好
在下面的例子中,假设我从一行的开头开始,试图用元音到达e
。突出显示这些事件中的每一个将是有帮助的,这样我就可以获得一些关于按下次数的上下文信息代码>在初始搜索之后
# Here is a comment with a lot of vowels and I have passed it now
Vim当前的f
实现如何知道如何只等待一个字符而不是换行?
我更愿意覆盖内置的f
功能,因此我使用了类似于此的重新映射,但是一个问题是它希望我在最后按enter键
nnoremap f :call HighlightFSearches(input(''))<CR>
“使用“f”突出显示搜索”
nnoremap f高亮显示#高亮显示搜索('f'))
nnoremap f
vnoremap f高亮显示#高亮显示搜索('f'))
vnoremap f
“使用“F”突出显示搜索”
nnoremap F高亮显示#高亮显示搜索('F'))
nnoremap F
vnoremap F高亮显示#高亮显示搜索('F'))
vnoremap F
请注意,我选择了用于视觉选择的高光组。你可以选择另一个或自己做一个简短而甜蜜的答案是用input()
代替getchar()
简短而甜蜜的答案是用input()
代替getchar()简短的答案是你应该用它从用户那里获得一个字符
答案很长,因为在处理getchar()
请注意,getchar()
可能会返回一个数字(对于普通按键,您可以将其转换为字符),或者返回一个字符串,对于特殊键(退格、箭头等),从一个特殊的0x80字节开始
一种简单的方法(但有些有效)是,对为特殊键返回的字符串运行nr2char()
,将返回一个空字符串,因此我们可以使用它跳过这些字符串
下一个建议是,可以在映射中使用以字符串形式返回新命令。这与非递归映射一起,允许您在函数末尾返回实际的f
命令本身,以便完成部分模拟工作
最后,您可能想使用的另一个技巧是为f
创建一个“虚拟”映射,后跟一个无效字符。这种2字符映射的存在使得f
映射在输入第二个字符之前不会触发,这将防止Vim在等待字符时将光标移动到最后一行,从而使f
仿真更加无缝
总而言之:
function! HighlightFSearches(cmd)
" Get extra character for the command.
let char = nr2char(getchar())
if char ==# ''
" Skip special keys: arrows, backspace...
return ''
endif
" Here you'll want to highlight "char"
" on the current line.
" Finally, execute the original command.
return a:cmd.char
endfunction
nnoremap <expr> f HighlightFSearches('f')
nnoremap f<bs> <nop>
函数!HighlightFSearches(cmd)
“获取命令的额外字符。
设char=nr2char(getchar())
如果char==#“”
跳过特殊键:箭头、退格。。。
返回“”
恩迪夫
在这里,您需要突出显示“char”
“在当前线路上。
“最后,执行原始命令。
返回一个:cmd.char
端功能
nnoremap f highlightfsearchs('f')
nnoremap f
该函数的编写方式使您可以轻松地将其用于F
、t
和t
要突出显示匹配项,您可以使用(或:2match
,:3match
),或者您可以设置@
,让'hlsearch'
进行突出显示
您可能希望将regexp锚定在当前行上,因此仅突出显示那些匹配项,请参阅以了解可用于该操作的内容
最后,如果移动到另一行,可能需要清除突出显示。为此,请查看autocmd
事件
有很多细节需要解决,但希望这将阐明如何模拟获取要搜索的字符的命令部分。简单的回答是,您应该使用从用户获取单个字符
答案很长,因为在处理getchar()
请注意,getchar()
可能会返回一个数字(对于普通按键,您可以将其转换为字符),或者返回一个字符串,对于特殊键(退格、箭头等),从一个特殊的0x80字节开始
一种简单的方法(但有些有效)是,对为特殊键返回的字符串运行nr2char()
,将返回一个空字符串,因此我们可以使用它跳过这些字符串
下一个建议是,您可以在映射中使用以字符串形式返回新命令。这与非递归映射一起,允许您在函数末尾返回实际的f
命令本身,以便完成部分模拟
最后,您可能想使用的另一个技巧是创建“虚拟对象”f
的映射后跟无效字符。这种2字符映射的存在使得f
映射在输入第二个字符之前不会触发,这将防止Vim在等待字符时将光标移动到最后一行,从而使f
仿真更加无缝
总而言之:
function! HighlightFSearches(cmd)
" Get extra character for the command.
let char = nr2char(getchar())
if char ==# ''
" Skip special keys: arrows, backspace...
return ''
endif
" Here you'll want to highlight "char"
" on the current line.
" Finally, execute the original command.
return a:cmd.char
endfunction
nnoremap <expr> f HighlightFSearches('f')
nnoremap f<bs> <nop>
函数!HighlightFSearches(cmd)
“获取命令的额外字符。
设char=nr2char(getchar())
如果char==#“”
跳过特殊键:箭头、退格。。。
返回“”
恩迪夫
在这里,您需要突出显示“char”
“在当前线路上。
“最后,执行原始命令。
返回一个:cmd.char
端功能
nnoremap f highlightfsearchs('f')
nnoremap f
函数的编写方式与
function! HighlightFSearches(cmd)
" Get extra character for the command.
let char = nr2char(getchar())
if char ==# ''
" Skip special keys: arrows, backspace...
return ''
endif
" Here you'll want to highlight "char"
" on the current line.
" Finally, execute the original command.
return a:cmd.char
endfunction
nnoremap <expr> f HighlightFSearches('f')
nnoremap f<bs> <nop>