`
marlonyao
  • 浏览: 252684 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在vim中运行Bash aliases

    博客分类:
  • Bash
阅读更多
我比较喜欢用bash的alias,如果一些命令老是重复出现或者容易输错,我就会将它们写成alias,或者稍微复杂一点,写一个函数。慢慢地也还累积了不少alias,用得也很习惯,以至于我用别人的电脑,总不太适应,alias另外也会导致某些命令的自动补全失效。我这里要说的另外一个问题,我们知道在vim及其它一些工具中可以执行外部命令,但是它并不能执行alias和函数,这就比较令人困惑,我不得不输入展开的alias,而使用alias的不良后果之一就是容易忘记原来的命令,需要在alias和展开的形式之间切换是件很麻烦的事。函数和alias也类似,但是要展开函数就更麻烦了,由于两者的相似性,下文我只说alias,其实对函数也是适用的。

首先明白为什么不能在vim中使用alias是有好处的。进程要执行一个命令只能依靠系统函数execve(在它之前可能要先调用fork函数),它的函数声明如下:
int execve(const char *filename, const char *argv[], const char *envp[]);


execve只识别文件名,Bash之所以能够识别alias,是因为在调用execve之前它已经将alias展开了,这有点类似C语言的宏。alias为bash所独有,vim无法识别,类似地,其它外部命令也识别不了。这样我们就很容易理解为什么xargs、find、sudo等命令中不能使用alias了,却可以在管道中使用。举个例子:

alias grep='grep -i --color=auto'

find . -name '*.py' -exec grep 'class' '{}' \;

find . -name '*.py' | grep hello


第一条命令定义了grep的alias,第二条命令执行find,它同时调用grep命令,由于find属于外部命令,它只能执行外部的grep命令,而不是在第一条命令中定义的alias。第三条命令包含管道,管道实际上是个复合命令,它包含两个子命令,分别是find和grep,均由bash执行,在执行之前会先扩展每条命令,所以这里执行的grep就是第一条命令中扩展后的alias,整条命令相当于执行:
find . -name '*.py' | command grep -i --color=auto


简单地说,只有Bash才知道alias,所以在外部(vim, find, xargs中)运行alias的唯一方法就是通过bash去运行。
bash -ic 'your alias'

-c选项表示从参数中读取命令,而不是向通常那样从文件中读取。-i表示在交互模式下运行,只有在交互模式下才会扩展alias。Bash分为交互模式和非交互模式,通常我们打开一个bash进入是交互模式,会有一命令提示符等待用户输入,用户从键盘输入(或者重定向从文件读入),然后bash执行用户命令,将结果输入至标准输出,执行完毕又显示提示符等待用户输入,这是交互模式。运行脚本时运行的是非交互模式,例如"bash hello.sh",在hello.sh中命令是在非交互模式下执行的,这时不会扩展alias,可以用选项-i将它切换到交互模式下。所以脚本在一般情况下是不会扩展alias的,除非你在执行时指定了-i选项,这么做的原因很明显,因为alias是非常个性化,而脚本却希望在所有机器上的行为表现一致,如果你刚好alias了系统脚本中的某条命令,那么这个脚本可能就会运行不正常。在vim中执行alias其实还有一个简单的方法,就是设置shellcmdflag选项:
:set shellcmdflag=-ic

这样就可以直接使用':!your_alias'来执行bash alias了。

分享到:
评论

相关推荐

    bash_aliases

    在Linux和Unix-like操作系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,用户可以通过它来执行各种系统命令。`bash_aliases`是一个...熟练掌握`bash_aliases`的配置和使用,将让你在Linux环境中如鱼得水。

    ubuntuConfig:包含用于ubuntu别名的.bashrc,.bash_profile,.bash_aliases和.vi​​mrc文件的存储库

    在某些Linux发行版中,包括Ubuntu,`.bash_profile`通常会源(source)`.bashrc`来确保登录和非登录会话共享相同的设置。这样,即使在登录时,用户也可以享受到`.bashrc`中的所有定制。 `.bash_aliases`文件是用来...

    dotfiles:我的Vim,Bash,Git和其他配置文件

    4. `.bash_aliases` - 可能包含额外的Bash别名和函数。 5. `.gitignore_global` - 全局的Git忽略文件,用于在所有项目中忽略特定类型的文件。 6. `.editorconfig` - EditorConfig文件,用于跨编辑器的代码风格一致性...

    dotfiles:我的git,vim,tmux,bash,fluxbox等配置文件

    4. **Bash**:Bash是Linux和macOS中常用的Shell,它的配置文件包括`~/.bash_profile`、`~/.bashrc`和`~/.bash_aliases`。这些文件可以定制命令提示符、环境变量、别名和自定义函数,优化命令行交互体验。 5. **...

    dotfiles:z zsh,vim,emacs,tmux和bash的点文件。 在Mac OS上测试

    使用以下其中一种源代码~/.dotfiles/bash/functions和~/.dotfiles/bash/aliases : .bash_profile , .bashrc或.zshrc 。 Zsh Conf 符号链接~/.dotfiles/zsh/.zshrc到$HOME : ln -s ~/.dotfiles/zsh/.zshrc ~/....

    linux-config:加速新机器的设置以提高bashpythonvim的生产力

    sudo apt-get install build-essential cmake python3-dev重击cp bash_aliases ~/.bash_aliases# or do thisln -s /home/syrus/src/linux-config/bash_aliases ~/.bash_aliases液体提示cdgit clone ...

    dotfiles:我的点文件

    安装脚本在python中,我发现它比bash更具可读性。 结构 回购按主题划分。 扩展名为.symlink任何文件都将在主文件夹中进行.symlink链接。 文件夹和文件都可以链接。 任何扩展名为.bash都将由~/.bash_aliases来源,...

    parallels-shell-extensions:使平行云服务器的 ssh 监狱可用

    在监狱中创建/home 将所有文件保存到/home 使 .profile 和 .bashrc 可执行(chmod a+x ...) 为配置文件创建符号链接: ln -s /home/.profile /.profile 登出 登录 特征 花式 bash 提示 所有配置文件的假主目录...

    环境:我的个人bash dotfile集合

    在bash环境中,常见的dotfiles包括`.bashrc`、`.bash_profile`、`.bash_aliases`等。`.bashrc`文件是bash启动时执行的脚本,用于设置环境变量、定义别名和函数;`.bash_profile`则在登录shell启动时运行,常用于设置...

    Linux alias文件的使用.docx

    记得在修改后运行`source ~/.bashrc`或`source ~/.bash_aliases`来使改动生效。 总之,熟练使用Linux alias不仅可以简化命令输入,还可以减少出错的可能性,尤其是对于频繁执行的命令,alias可以极大地提升日常工作...

    bash:定制的bash配置文件

    在Linux和Unix-like操作系统中,Bash(Bourne-Again SHell)是默认的命令行解释器,它为用户提供了一个交互式环境来执行各种任务。`bash-main`可能指的是用户的主bash配置文件,通常位于`~/.bashrc`或`~/.bash_...

    dotfiles:我的每日dotfile和脚本

    点文件我在Linux和Max OS X上使用的个人配置文件。如果要将vim配置与... $ wget -qO - https://raw.githubusercontent.com/boogy/dotfiles/master/install.sh | bash -s no用法.bash_aliases为Linux添加.bash_ali

    bashrc&profile.zip

    首先,`.bashrc`文件,全称Bash运行控制文件,它是在用户启动一个新的Bash shell(交互式或非交互式)时执行的。主要包含以下内容: 1. **别名(Aliases)**:`.bashrc`文件通常用来创建自定义的命令别名,例如`ll`...

    家庭配置:我的家庭配置文件,包括别名,git,vim,mc等

    为了部署我的配置,只需运行: [0][2019-02-28 09:15:26][0][florentclarret@dana: ~ /Documents/Dev/Shell/home-configuration] (branch: master) $ ./install_home_configuration.bash 如果您希望自动加载别名...

    非root用户安装指定jdk版本的tomcat

    在实际工作中,有时会遇到需要在同一台服务器上同时运行多个不同版本的Java应用的情况。特别是当服务器上已经安装了某个特定版本的Java Development Kit (JDK) 时,如果新的应用需要另一个版本的JDK,就需要解决如何...

    dotfiles:zsh,vim等的配置

    在这个文件中,你可以设定别名(aliases)、环境变量(environment variables)、路径(path),以及加载插件。例如,安装Oh My Zsh框架后,你可以通过添加插件来增强`zsh`的功能,如自动完成、历史搜索、颜色提示等...

    dotfiles(1)-源码.rar

    8. **系统别名和脚本**:开发者可能会创建自己的系统别名或脚本,放在`.bash_aliases`或其他文件中,方便执行常见的系统任务。 9. **Zsh配置**:如果`.zshrc`文件存在,可能意味着用户使用的是Zsh shell,它提供了...

    dotfiles:我的应用程序配置(neovim,bash,zsh,i3wm等),脚本和墙纸

    在给定的标题和描述中,我们看到提到了几个关键的点文件及其相关的工具,如neovim、bash、zsh和i3wm。接下来,我们将详细探讨这些知识点。 1. **Neovim**: Neovim是一个现代化的vim编辑器分支,它旨在提高性能、...

    点文件

    在Bash 4.4及更高版本中,`.bash_profile`通常会源(source)`.bashrc`来合并用户配置。 3. `.bash_aliases`:这是一个可选的文件,可以包含用户的别名定义,避免将`.bashrc`文件填得过于庞大。如果存在,可以在`....

    dotfiles

    在Vimscript方面,`dotfiles`中的`.vimrc`文件特别关键,因为它定义了Vim的启动行为、快捷键映射、插件设置、颜色方案等。通过学习和定制`.vimrc`,用户可以极大地提高编辑效率,使Vim更加符合自己的工作习惯。Vim...

Global site tag (gtag.js) - Google Analytics