Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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 如何使用“:g/regex/d_”而不丢失当前光标位置_Vim - Fatal编程技术网

Vim 如何使用“:g/regex/d_”而不丢失当前光标位置

Vim 如何使用“:g/regex/d_”而不丢失当前光标位置,vim,Vim,在Vim中,如果您运行 :g/some_word/d_ 所有包含某个单词的行都将被删除,光标将自动跳到上次删除的位置。我希望光标保持在操作前的位置。如何实现这一点?您不能让光标停留,但可以让它回到原来的位置: :g/some_word/d_|norm '' 您不能使光标停留,但可以使其回到原来的位置: :g/some_word/d_|norm '' Romaill的答案是好的,它应该不会有任何额外的麻烦 如果这是一个常见的问题,您不希望添加额外的规范!完成后,在末尾或键入键序列时,可以将其

在Vim中,如果您运行

:g/some_word/d_
所有包含某个单词的行都将被删除,光标将自动跳到上次删除的位置。我希望光标保持在操作前的位置。如何实现这一点?

您不能让光标停留,但可以让它回到原来的位置:

:g/some_word/d_|norm ''
您不能使光标停留,但可以使其回到原来的位置:

:g/some_word/d_|norm ''

Romaill的答案是好的,它应该不会有任何额外的麻烦

如果这是一个常见的问题,您不希望添加额外的规范!完成后,在末尾或键入键序列时,可以将其封装在命令中:

command! -nargs=* G call s:G(<q-args>)

function! s:G(args)
  let saved_position = winsaveview()
  exe 'g'.a:args
  call winrestview(saved_position)
endfunction
:G命令将使用其所有参数调用s:G函数,从而保存位置,使用这些精确参数运行普通G,然后恢复它。因此您需要执行:G/some_word/d_,它将运行命令并将光标恢复到它开始的行/列中

显然,这只有在您经常使用它并且不经常在远程服务器之类的裸vim上工作时才有意义。否则,不妨试试罗梅因的建议,或者习惯打字。你的选择


此外,如果当前位置恰好位于其中一些行之后,光标可能会出现在意外的位置。例如,如果光标位于第7行,并且命令删除了第3行,那么您将返回第7行,但所有文本将上移一行,因此您将位于错误的位置。您可能可以使用此函数并对更改进行补偿,但它会很快变得非常复杂,因此我不推荐使用此函数:

Romaill的答案很好,它应该可以做到这一点,而不需要任何额外的麻烦

如果这是一个常见的问题,您不希望添加额外的规范!完成后,在末尾或键入键序列时,可以将其封装在命令中:

command! -nargs=* G call s:G(<q-args>)

function! s:G(args)
  let saved_position = winsaveview()
  exe 'g'.a:args
  call winrestview(saved_position)
endfunction
:G命令将使用其所有参数调用s:G函数,从而保存位置,使用这些精确参数运行普通G,然后恢复它。因此您需要执行:G/some_word/d_,它将运行命令并将光标恢复到它开始的行/列中

显然,这只有在您经常使用它并且不经常在远程服务器之类的裸vim上工作时才有意义。否则,不妨试试罗梅因的建议,或者习惯打字。你的选择

此外,如果当前位置恰好位于其中一些行之后,光标可能会出现在意外的位置。例如,如果光标位于第7行,并且命令删除了第3行,那么您将返回第7行,但所有文本将上移一行,因此您将位于错误的位置。您可能可以使用此函数并补偿更改,但它会很快变得非常复杂,因此我不推荐使用它:

提供了一个方便的:KeepView命令;您可以将其应用于任何Ex命令,因此它甚至比@AndrewRadev建议的:G命令更通用:

:KeepView g/some_word/d_
提供了一个方便的:KeepView命令;您可以将其应用于任何Ex命令,因此它甚至比@AndrewRadev建议的:G命令更通用:

:KeepView g/some_word/d_

我建议对您的答案进行两个小的改进:使用反勾号而不是单引号将光标恢复到右侧列。使用规范!如果出于某种原因重新映射了某些内容,那么使用反勾号而不是单引号将避免出现问题。我建议对您的答案进行两个小的改进:使用反勾号而不是单引号将光标恢复到右侧列。使用规范!如果某些东西因为某种原因被重新映射,norm将避免出现问题。虽然romainl的答案很适合我,但你的方式很好记住,谢谢。romainl的答案很适合我,你的方式很好记住,谢谢