如何使用 bash 脚本在 vim ex 模式下跳转到一个字符串
How to jump to a string in vim ex mode using a bash script
我想移动到文本文件“file1”中的“internal”一词,并从 bash 脚本中删除从那里到文件末尾的所有内容。这是我的 vim 命令序列:
/internal
execute "normal !dG"
w
当我将其保存在文本文件中并在 ex 模式下从命令行将其传递给 vim 时,一切正常。但是当我尝试从外部的终端命令提示符执行此操作时 vim :
echo "/internal | execute "normal! dG" | w" | vim -e file1
没用。我找出 file1,发现它没有改变。文本文件 file1 如下所示:
one
one
one
one
one
internal
two
two
two
two
two
尝试在终端命令提示符下工作时我做错了什么?
对于/internal | exec(...
,所有的字符串都会被/
解释。您可以在单独的行中编写 /internal
。像这样:
[STEP 101] $ cat file
1
2
foo
3
4
[STEP 102] $ printf 'norm gg\n/foo\n.,$p|q\n' | vim -e file
foo
3
4
[STEP 103] $
或使用search()
函数:
[STEP 104] $ echo 'exec("norm gg") | call search("foo") | .,$p | q' | vim -e file
foo
3
4
[STEP 105] $
我想移动到文本文件“file1”中的“internal”一词,并从 bash 脚本中删除从那里到文件末尾的所有内容。这是我的 vim 命令序列:
/internal
execute "normal !dG"
w
当我将其保存在文本文件中并在 ex 模式下从命令行将其传递给 vim 时,一切正常。但是当我尝试从外部的终端命令提示符执行此操作时 vim :
echo "/internal | execute "normal! dG" | w" | vim -e file1
没用。我找出 file1,发现它没有改变。文本文件 file1 如下所示:
one
one
one
one
one
internal
two
two
two
two
two
尝试在终端命令提示符下工作时我做错了什么?
对于/internal | exec(...
,所有的字符串都会被/
解释。您可以在单独的行中编写 /internal
。像这样:
[STEP 101] $ cat file
1
2
foo
3
4
[STEP 102] $ printf 'norm gg\n/foo\n.,$p|q\n' | vim -e file
foo
3
4
[STEP 103] $
或使用search()
函数:
[STEP 104] $ echo 'exec("norm gg") | call search("foo") | .,$p | q' | vim -e file
foo
3
4
[STEP 105] $