我正在使用 Kubuntu 20.04,但这是一个困扰我几十年的 bash 问题。
我的 USB 上有 .vimrc 和 .viminfo。因此,为了使用 vim 作为 FCEDIT 的编辑器,我设置了
export FCEDIT='vim -u /media/WE_MNT_HISTFIL/root/.vimrc'
这将使用选项调用 vim
textwidth=66
使普通应用程序具有自动换行等功能。
另一方面,我经常需要对很长的行调用“fc”,例如在脚本中。
每次调用“fc”后我必须设置:
textwidth=0
为了避免这种令人恼火的情况,我经过长期的 Google 搜索,然后开发了一个如下功能:
alias fc1='WEfunc_my_fc_alias'
function WEfunc_my_fc_alias() {
/bin/cp -f "/media/WE_MNT_HISTFIL/root/.vimrc" /tmp/WEx_vimrc_tmp
echo "set textwidth=0" >>/tmp/WEx_vimrc_tmp
export FCEDIT='vim -u /tmp/WEx_vimrc_tmp'
fc -1 -1
export FCEDIT='vim -u /media/WE_MNT_HISTFIL/root/.vimrc'
}
我的问题是,请问有人知道更简单的解决方案吗?
据我所知,bash 不允许其他方式。
答案1
如果只是fc
配置vim
必须不同,那么您可以使用如下别名:
fc='FCEDIT="vim" fc'
这会在调用 fc 命令之前(并且只是为了调用 fc 命令)更改环境变量FCEDIT
。您可以在双引号之间指定另一个自定义 vim 配置文件。
答案2
通读一下 vim 手册页:您正在寻找选项-c
。您不必重写任何 vim rc 文件。使用 shell 包装函数有助于引用。
unalias fc
fc() { FCEDIT='vim -c "set tw=0"' builtin fc "$@"; }
... 显然这行不通。看来 bash 不尊重 FCEDIT 值中的内部引号,并执行此操作
vim -c '"set' 'tw=0"' temp_file_name
然而,这确实有效:
fcvim () { vim -c "set tw=0" "$@"; }
fc() { FCEDIT=fcvim builtin fc "$@"; }
另一方面,在 fc 编辑会话中,vim 似乎设置了filetype=sh
。因此,您可以创建~/.vim/ftplugin/sh.vim
包含 的set textwidth=0
,并filetype plugin on
在 中添加~/.vimrc
,然后您不必担心调用 的任何特殊操作fc