Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vim中突出显示f键搜索_Vim - Fatal编程技术网

在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>