Bash 在命令行上键入的文本上启动vim的快捷方式

Bash 在命令行上键入的文本上启动vim的快捷方式,bash,vim,Bash,Vim,我在命令行中输入了一个很长的命令,结果发现Bash不喜欢嵌入单引号。这是一个简单的tty,我保存这个命令以便在文件中运行的唯一方法是打开vim并再次开始键入这个非常长的命令 是否有一个快捷方式可以直接从命令行在命令行中键入的文本上启动vim?当然有。以下命令将在$VISUAL中编辑当前命令行: C-x C-e 当然有。以下命令将在$VISUAL中编辑当前命令行: C-x C-e 我找到了我的案例的答案: 首先是@marlar的警告(我做了一个保护自己的功能 由此,请参见下文): 使用此功能时

我在命令行中输入了一个很长的命令,结果发现Bash不喜欢嵌入单引号。这是一个简单的tty,我保存这个命令以便在文件中运行的唯一方法是打开vim并再次开始键入这个非常长的命令


是否有一个快捷方式可以直接从命令行在命令行中键入的文本上启动vim?

当然有。以下命令将在
$VISUAL
中编辑当前命令行:

C-x C-e

当然有。以下命令将在
$VISUAL
中编辑当前命令行:

C-x C-e

我找到了我的案例的答案:

首先是@marlar的警告(我做了一个保护自己的功能 由此,请参见下文):

使用此功能时要非常小心。如果取消编辑,则会显示原始文件 命令行将立即执行。因此,如果您正在编辑rm-rf 然后调用编辑器,意识到你对某些东西感兴趣 危险,因此取消编辑,您的根文件系统将被删除 没有进一步的问题

从OP@Kartik:

bash手册页上说:

编辑和执行命令(C-xC-e) 在当前命令行上调用编辑器,并执行 结果为shell命令。Bash试图调用$VISUAL, $EDITOR,并按此顺序将emacs作为编辑器

来自@Mark E.Haase

如果使用Bash的vi模式,捷径是Esc、V

实际上,我还发现只做
v
就足以用bash启动vim 我坐在那里

来自@karlicoss:

如果您的编辑器是vim,那么可以使用:cq,它使它以非零代码退出, 并阻止命令执行

因为我对
rm-rf
命令有点偏执(我曾经删除了2Tb的大脑) 数据-切换到linux后10天…幸运的是系统管理员有一个 备份…实际引用:“我20年来从未见过如此愚蠢的事情 做这项工作“…但我离题了)我把以下内容放在我的vimrc中 如果我不小心调出vim和 本能退出:

function! CheckBashEdit()
    " if the file matches this highly specific reg exp, comment the line
    "(e.g. a file that looks like: /tmp/bash-fc.xxxxxx)
    if match(@%, "\/tmp\/bash-fc\.......") != -1
        " comment out the command
        silent! execute ":%normal! I# "
        write
    endif
endfunction

" if we ended up in vim by pressing <ESC-v>, put a # at the beggining of
" the line to prevent accidental execution (since bash will execute no
" matter what! Imagine rm -rf <forward slash> was there...)
autocmd BufReadPost * :call CheckBashEdit()
函数!CheckBashEdit()
“如果文件与此高度特定的reg exp匹配,请注释该行。”
“(例如,看起来像:/tmp/bash fc.xxxxxx的文件)
如果匹配(@%,“\/tmp\/bash fc\…”)=-1.
“注释掉该命令
静默!执行“:%正常!我#”
写
恩迪夫
端功能
“如果我们最后通过按压而进入vim,请在
“防止意外执行的行(因为bash不会执行
“不管怎样!想象一下rm-rf在那里……)
autocmd BufReadPost*:调用CheckBashEdit()

我找到了我的案例的答案:

首先是@marlar的警告(我做了一个保护自己的功能 由此,请参见下文):

使用此功能时要非常小心。如果取消编辑,则会显示原始文件 命令行将立即执行。因此,如果您正在编辑rm-rf 然后调用编辑器,意识到你对某些东西感兴趣 危险,因此取消编辑,您的根文件系统将被删除 没有进一步的问题

从OP@Kartik:

bash手册页上说:

编辑和执行命令(C-xC-e) 在当前命令行上调用编辑器,并执行 结果为shell命令。Bash试图调用$VISUAL, $EDITOR,并按此顺序将emacs作为编辑器

来自@Mark E.Haase

如果使用Bash的vi模式,捷径是Esc、V

实际上,我还发现只做
v
就足以用bash启动vim 我坐在那里

来自@karlicoss:

如果您的编辑器是vim,那么可以使用:cq,它使它以非零代码退出, 并阻止命令执行

因为我对
rm-rf
命令有点偏执(我曾经删除了2Tb的大脑) 数据-切换到linux后10天…幸运的是系统管理员有一个 备份…实际引用:“我20年来从未见过如此愚蠢的事情 做这项工作“…但我离题了)我把以下内容放在我的vimrc中 如果我不小心调出vim和 本能退出:

function! CheckBashEdit()
    " if the file matches this highly specific reg exp, comment the line
    "(e.g. a file that looks like: /tmp/bash-fc.xxxxxx)
    if match(@%, "\/tmp\/bash-fc\.......") != -1
        " comment out the command
        silent! execute ":%normal! I# "
        write
    endif
endfunction

" if we ended up in vim by pressing <ESC-v>, put a # at the beggining of
" the line to prevent accidental execution (since bash will execute no
" matter what! Imagine rm -rf <forward slash> was there...)
autocmd BufReadPost * :call CheckBashEdit()
函数!CheckBashEdit()
“如果文件与此高度特定的reg exp匹配,请注释该行。”
“(例如,看起来像:/tmp/bash fc.xxxxxx的文件)
如果匹配(@%,“\/tmp\/bash fc\…”)=-1.
“注释掉该命令
静默!执行“:%正常!我#”
写
恩迪夫
端功能
“如果我们最后通过按压而进入vim,请在
“防止意外执行的行(因为bash不会执行
“不管怎样!想象一下rm-rf在那里……)
autocmd BufReadPost*:调用CheckBashEdit()

我发誓,这些年来,我偶尔做过几次这样的事——如果我做了,我会尝试找出方法并发布,但我希望有人answers@mattb我也可以发誓!任何提示都会被感激的。我发誓这些年来我已经意外地这样做了好几次——如果我这样做了,我会试着找出方法并发布,但我希望有人answers@mattb我也可以发誓!任何提示都将不胜感激。使用:cq退出vim是一个有用的特性。另一个相当简单的解决方案是将“危险”文本编辑成乱码,然后保存并退出,就像::wq那样。Vim将把乱码保存到/tmp中的临时文件中并执行乱码。我的问题是,我可能不知道Vim为什么打开,本能地只做
:q不假思索,我明白你的意思。我想我会养成用:cq而不是:q退出的习惯!使用:cq退出vim是一个有用的特性。另一个相当简单的解决方案是将“危险”文本编辑成乱码,然后保存并退出,就像::wq那样。Vim将把这些胡言乱语保存到/tmp中的临时文件中并执行这些胡言乱语