Vim:跳转到文件的最后一个非空格字符

5
我有一个200,000行的ora文件,但是最后60,000多行都是空白换行符/空格。
我知道G可以跳到文件末尾,但我该如何配置vim跳到最后一行或字符,而不是空白和换行符?
3个回答

6

G?\SEnter

这是一个快捷键,用于跳转到文档末尾,在向后搜索时找到非空格字符并跳转。如果需要映射,请使用该快捷键。

nnoremap <Leader>G G?\S<CR>:noh<CR>

编辑:如果最后一行不是空白行,以下方法将无法起作用。以下是一个修改版,即使最后一个字符不是空白字符,也能正常工作:

nnoremap <Leader>G G$?\S<CR>:noh<CR>

为了解决这个问题,需要进行一些复杂的操作。我们将跳转到文件的最后一个字符,并测试它是否为空格。如果不是空格,则完成;但如果是空格,则可以使用之前的解决方案。(这也保存了我们弄乱的事物的状态,因此它对您的工作的干扰将最小化。)
function! LastChar()
  let oldsearch = @/
  let oldhls = &hls
  let oldz = @z

  norm G$"zyl
  if match(@z, '\S')
    exe "norm ?\\S\<CR>"
  endif

  let @/ = oldsearch
  let &hls = oldhls
  let @z = oldz
endfunction

nnoremap <Leader>G :call LastChar()<CR>

考虑一个有3行代码的文件:aaabbbcccccc行末尾有空格。你想移动到最后一个c,但它不起作用。 - john c. j.
最初,光标位于第一个“a”。我按下“G”,光标移动到第一个“c”。我键入“?\S”并按Enter键,光标移动到最后一个“b”。这种行为是可以的。我所说的是,拥有一个适用于两种情况的单一解决方案将是很好的。也就是说,适用于原始帖子中描述的情况以及我在评论中描述的情况。编辑:哦,我看到了你最后一条评论中的编辑:D - john c. j.
啊,好的,我终于明白你的意思了。抱歉我有点迟钝 :P 不幸的是,如果最后一个字符是空格,我想不出简单的解决方案。 - Amadan
好的,在这种情况下,我们可以使用“Gg_”。 - john c. j.
@johnc.j。最后一次编辑可能解决了您的问题 :) - Amadan
显示剩余2条评论

2

(count)g_会移动到当前行下面count行最后一个非空字符。因此,你可以这样愚蠢地操作:

999999999g_

作为映射:
nnoremap <leader>g_ 999999999g_

0
我使用
nnoremap G G{}

它跳到最后一个段落之后的行。

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