mac 使用launchctl 开机时加速vim、emacs
WARNING
注意:脚本原文件来源于网络,部分修改只在小范围测试过,请在正式使用前做好备份、测试
目标
- 编写脚本,将vim,emacs等配置文件放置到内存中,调用速度更快
- 使用launchctl开机自启动1中的脚本
环境
- mac osx 10.14.6
- vim8 配置文件为 SpaceVim
- emacs 配置文件为 seagle0128
脚本
mount-ram-vim.sh 创建内存镜像挂载点
#!/bin/sh# This program has two feature.
#
# 1. Create a disk image on RAM.
# 2. Mount that disk image.
#
# Usage:
# $0 <dir> <size>
#
# size:
# The `size' is a size of disk image (MB).
#
# dir:
# The `dir' is a directory, the dir is used to mount the disk image.
#
# See also:
# - hdid(8)
#mount_point=${1:-/Users/mac/vim_ram}
size=${2:-128}mkdir -p $mount_point
if [ $? -ne 0 ]; thenecho "The mount point didn't available." >&2exit $?
fisector=$(expr $size \* 1024 \* 1024 / 512)
device_name=$(hdid -nomount "ram://${sector}" | awk '{print $1}')
if [ $? -ne 0 ]; thenecho "Could not create disk image." >&2exit $?
finewfs_hfs -v vim $device_name > /dev/null
if [ $? -ne 0 ]; thenecho "Could not format disk image." >&2exit $?
fimount -o nobrowse,rw -t hfs $device_name $mount_point
# -o nobrowse : do not display mount device on Finder sidebar
if [ $? -ne 0 ]; thenecho "Could not mount disk image." >&2exit $?
fi
unmount-ram-vim.sh 关机/重启时卸载内存镜像
#!/bin/sh# This program has two features.
#
# 1. Unmount a disk image.
# 2. Detach the disk image from RAM.
#
# Usage:
# $0 <dir>
#
# dir:
# The `dir' is a directory, the dir is mounting a disk image.
#
# See also:
# - hdid(8)
#mount_point=${1:-/Users/mac/vim_ram}
if [ ! -d "${mount_point}" ]; thenecho "The mount point didn't available." >&2exit 1
fi
mount_point=$(cd $mount_point && pwd)device_name=$(df "${mount_point}" 2>/dev/null | tail -1 | grep "${mount_point}" | cut -d' ' -f1)
if [ -z "${device_name}" ]; thenecho "The mount point didn't mount disk image." >&2exit 1
fiumount "${mount_point}"
if [ $? -ne 0 ]; thenecho "Could not unmount." >&2exit $?
fihdiutil detach -quiet $device_name
vim2ram.sh 将spacevim配置文件移入、移出内存镜像
#!/bin/sh
function start()
{backup=/Users/mac/.spacevim-backuplink=/Users/mac/.SpaceVimvolatile=/Users/mac/vim_ram/.SpaceVim-$USERIFS=set -efucd ~/if [ ! -r $volatile ]; thenmkdir -m0700 $volatilefi# link -> volatie does not existif [ "$(readlink $link)" != "$volatile" ]; then# backup project at firstmv $link $backup# create the linkln -s $volatile $linkfiif [ -e $link/.unpacked ]; thenecho "Sync .SpaceVim from memory to backup ..."rsync -avq --delete --exclude .unpacked $link/ $backup/echo "DONE!"elseecho "Sync .SpaceVim from disk to memory ..."rsync -avq $backup/ $link/touch $link/.unpackedecho "DONE!"fi
}function restore()
{echo "Moving .SpaceVim back to disk ..."backup=/Users/mac/.spacevim-backuplink=/Users/mac/.SpaceVimvolatile=/Users/mac/vim_ram/.SpaceVim-$USERcd ~/rm -f $link && mv $backup $link && rm -rf $volatileecho "DONE!"
}if [ -z "$1" ];thenecho "-------------------------------------------------------------"echo "Usage:"echo " vim2ram start"echo " vim2ram restore"echo "Default action is 'vim2ram start'. Now excute start..."startecho "-------------------------------------------------------------"exit 1
fiif [ "$1" == "start" ];thenstart
elserestore
fi
launchctl开机服务启动
启动脚本 boot-shutdown.sh
#!/bin/sh
#
# Author: Vincenzo D'Amore v.damore@gmail.com
# 20/11/2014
#function shutdown()
{echo `date` " " `whoami` " Received a signal to shutdown"# INSERT HERE THE COMMAND YOU WANT EXECUTE AT SHUTDOWN# remember Moving .emacs.d from ram back to disk##emacs##sh /Users/mac/emacs-speedup-scripts/emacs2ram.sh restore#echo ".emacd.d restore from ram complete!"#sh /Users/mac/emacs-speedup-scripts/unmount-ram.sh#echo "unmount-ram complete!"##vim#sh /Users/mac/emacs-speedup-scripts/vim2ram.sh restoreecho "SpaceVim restore from ram complete!"sh /Users/mac/emacs-speedup-scripts/unmount-ram-vim.shecho "unmount-ram-vim complete!"exit 0
}function startup()
{echo `date` " " `whoami` " Starting..."# INSERT HERE THE COMMAND YOU WANT EXECUTE AT STARTUP##emacs##sleep 3#sh /Users/mac/emacs-speedup-scripts/mount-ram.sh#echo "mount-ram complete!"#sh /Users/mac/emacs-speedup-scripts/emacs2ram.sh#echo "move .emacs.d to ram complete!"#vim#sleep 3sh /Users/mac/emacs-speedup-scripts/mount-ram-vim.shecho "mount-ram-vim complete!"sh /Users/mac/emacs-speedup-scripts/vim2ram.shecho "move SpaceVim to ram complete!"tail -f /dev/null &wait $!
}trap shutdown SIGTERM
trap shutdown SIGKILLstartup;
launchctl基础概念
macOS开机启动一般使用launchctl加载plist文件
plist文件放置处:
~/Library/LaunchAgents 由用户自己定义的任务项
/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。
LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。
launchctl基础命令
本次配置plist文件在 ~/Library/LaunchAgents 目录
launchctl load ~/Library/LaunchAgents/example.plist
# 卸载配置
launchctl unload ~/Library/LaunchAgents/example.plist
# 检查语法是否正确
plutil ~/Library/LaunchAgents/example.plist
# 查看服务运行状态
launchctl list
plist文件:

1.在~/Library/LaunchAgents 创建文件Vim2Ram.plist,内容为:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict><key>Label</key><string>boot_vim2ram</string><key>Program</key><string>/Users/mac/macosx-script-boot-shutdown/boot-shutdown.sh</string><key>ProgramArguments</key><array><string>/Users/mac/macosx-script-boot-shutdown/boot-shutdown.sh</string></array><key>RunAtLoad</key><true/><key>WorkingDirectory</key><string>/Users/mac/macosx-script-boot-shutdown/</string><key>StandardOutPath</key><string>/Users/mac/macosx-script-boot-shutdown/boot-shutdown.log</string><key>StandardErrorPath</key><string>/Users/mac/macosx-script-boot-shutdown/boot-shutdown.err</string><key>ExitTimeOut</key><integer>600</integer>
</dict>
</plist>
- /Users/mac/macosx-script-boot-shutdown/ 为自定义路径,按需修改
- /Users/mac/macosx-script-boot-shutdown/boot-shutdown.err与log为自定义日志文件,可有可无
- /Users/mac/macosx-script-boot-shutdown/boot-shutdown.sh 即启动脚本 1
效果
配置好plist之后,启动 launchctl load -w Vim2RAM.plist
查看镜像:

其他
- emacs处理逻辑类似,参照vim脚本修改即可
- 碰到plist报错问题,可使用launchcontrol调试, 安装命令为 brew cask install launchcontrol
参考:https://stackoverflow.com/questions/34215527/what-does-launchd-status-78-mean-why-my-user-agent-not-running
mac 使用launchctl 开机时加速vim、emacs相关推荐
- 问题解决:取消Mac下Karabiner-Elements开机时弹出窗口、用Capslock切换中英文输入法、外接机械键盘 option 和 cmd 互换
一.取消Karabiner-Elements开机时弹出窗口 Karabiner-Elements下载地址:https://karabiner-elements.pqrs.org/ Karabiner是 ...
- Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法
Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法 1.Mac如何删除在磁盘空间中的可清除空间 对于mac来说磁盘的空间是十分宝贵的,小编会定期的查看一下自己电脑的磁盘使 ...
- mac安静执行脚本_让Mac OS X系统启动时执行脚本的方法
公司购买了Zoho公司的资产管理软件AssetExplorer,该资产管理软件可以通过在客户机电脑上安装Agent客户端软件收集客户机的硬件及软件信息.公司有若干台iMac电脑,运行的是Mac OS ...
- debian /etc/fstab 开机时挂载的文件系统; /etc/mtab 当前挂载的文件系统
http://hi.baidu.com/wangcomeoffit/blog/item/d4ee340abe3779830b7b825e.html 1>Debian 6 安装后系统乱码的解决 下 ...
- Qt for Mac 设置软件开机自启动
在Qt程序中设置Mac软件的开机自启动,通过调用object-c代码来实现. 目前只测试过在非沙盒的环境下设置开机自启动,沙盒环境下没有测试过(设置方式不同,会比较复杂) 新建类,定义接口 void ...
- 苹果计算机咋出记录,怎么查看Mac电脑的开机记录?
可以使用last命令查看Mac电脑来看开机记录,同时也能查看关机记录. 首先打开mac的命令终端: 命令行终端敲入命令:last | grep reboot (查看开机时间记录) 命令行终端敲入命令: ...
- mac 设置mysql开机自启动
mac 设置mysql开机自启动 1.编辑一个mysql启动文件. 在终端里面输入: sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist 2.输入 ...
- 令xtu3service开机时立即启动_Mac开机时可以使用的快捷键 苹果电脑快捷键使用介绍...
大家都知道所有电脑在开机时,按住一些按键可以访问一些功能,当然Mac电脑也不例外.苹果电脑通过在开机启动时按住一个或多个按键可以访问一些Mac功能和工具.如果各位用户使用这些开机键组合键中的任何一个, ...
- MacBook Pro 15寸 Late 2013 更换2TB NVME硬盘利用Big Sur完美修复睡眠唤醒及开机时长问题
回馈社区,分享一下我的MacBook Pro 15寸 Late 2013 更换2TB NVME硬盘后利用Big Sur的升级完美修复睡眠唤醒及开机时长问题的经验.第一次在CSDN发帖,感觉自己瞬间成为 ...
最新文章
- typeof操作符的返回值
- Ubuntu16.04安装Pycharm2017.2
- CMarkup类在VC中的使用
- 微型计算机实验报告温度控制,单片机、可编程控制器实验教学大纲.doc
- 反转!美光、英特尔等多家美企恢复对华为供货;首例云服务器存储侵权案改判,阿里云不担责;英国政府拟严格审查Libra……...
- ZooKeeper 到底解决了什么问题?
- php设置上传文件浏览按钮的样式和文字,文件上传按钮的用户自定义样式的实现...
- CC2530——点对点通信
- 扁豆凝集素LCA/LcH填料/小扁豆凝集素-琼脂糖凝胶/双花扁豆凝集素DBA/黑皮扁豆凝集素
- Tapestry介绍
- Gluster-Heketi-Kubernetes 安装步骤(以DaemonSet形式安装) Ubuntu 16.04
- 如何注册成为腾讯QQ互联个人开发者
- 第三周java实验报告
- 微信小程序相关知识点和云音乐项目制作遇到的问题及解决
- Qt之流式布局(FlowLayout)
- 响应式网页设计(3)
- 利用WIN10自带ACG播放器完成.flv视频文件转码为mp4文件
- java坦克大战的总结_《坦克大战》总结心得
- “爱心助农,你我同行”,周文强化身超级主播带货不停
- 贪吃蛇小游戏——C语言