Vim - 搜索从行首开始特定偏移量处具有(或不具有)字符的行

5

我希望找到所有行中第78列(即行上的第78个字符)不是空格的情况。

理想情况下,我希望像普通搜索一样使用它。


第78列不等同于一行中的第78个字符。在vim中,列是一个函数,首先取决于您的制表符宽度。 - Todd Freed
3个回答

10

你可以使用这种模式:

\%78c\S
  • \%78c 匹配在第78列的位置(实际上,该列是字节号,因此对于多字节字符来说并不完全正确)。使用 \%78v 来匹配虚拟列。
  • \S 匹配非空格字符。

除了某些生成的模式(其中“{number}”是生成的),我从未看到过对\%{number}c的需求。这里的列指“从换行符偏移的字节”,除非您的文本是ASCII或某些8位编码,否则您不需要考虑字节偏移量。 - ZyX
似乎我仅使用\%{number}c插件来生成颜色表,我可以肯定的是字节偏移量、虚拟列和字符计数具有相同的值(所有字符-空格)。 - ZyX
如何将它们结合起来,例如,第78列是非空格,第80列是字母'a'。这好像不起作用:%78c\S%80ca - Rasmus Larsen

3

我猜你不需要@kev或者你所建议的:虽然你正确地找到了第78个字符(字符和附加符号算作一个),而且@kev也正确地找到了第78个字节,但看起来你正在解决类似于“超过第78列边界的文本”的问题。如果我的假设是正确的,那么你应该使用

\%78v\S

(\%{number}v 匹配虚拟(屏幕)列)。如果不是,最好使用你的答案,在除了一些生成的模式之外,我从来没有看到过使用 \%{number}c 的必要性。


2

我找到了解决方法,以下是一个例子,以防有人将来尝试这样做:

如果我想匹配第“n”列,我只需要匹配第“n-1”列的任何内容,然后执行我的第n列的条件。以下表达式查找所有具有第35列不等于空格的行。

^.\{34}[^ ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接