WARNING

注意:脚本原文件来源于网络,部分修改只在小范围测试过,请在正式使用前做好备份、测试

目标

  1. 编写脚本,将vim,emacs等配置文件放置到内存中,调用速度更快
  2. 使用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相关推荐

  1. 问题解决:取消Mac下Karabiner-Elements开机时弹出窗口、用Capslock切换中英文输入法、外接机械键盘 option 和 cmd 互换

    一.取消Karabiner-Elements开机时弹出窗口 Karabiner-Elements下载地址:https://karabiner-elements.pqrs.org/ Karabiner是 ...

  2. Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法

    Mac如何删除在磁盘空间中的可清除空间以及Mac开机时进度条卡100%的解决办法 1.Mac如何删除在磁盘空间中的可清除空间 对于mac来说磁盘的空间是十分宝贵的,小编会定期的查看一下自己电脑的磁盘使 ...

  3. mac安静执行脚本_让Mac OS X系统启动时执行脚本的方法

    公司购买了Zoho公司的资产管理软件AssetExplorer,该资产管理软件可以通过在客户机电脑上安装Agent客户端软件收集客户机的硬件及软件信息.公司有若干台iMac电脑,运行的是Mac OS ...

  4. debian /etc/fstab      开机时挂载的文件系统; /etc/mtab      当前挂载的文件系统

    http://hi.baidu.com/wangcomeoffit/blog/item/d4ee340abe3779830b7b825e.html 1>Debian 6 安装后系统乱码的解决 下 ...

  5. Qt for Mac 设置软件开机自启动

    在Qt程序中设置Mac软件的开机自启动,通过调用object-c代码来实现. 目前只测试过在非沙盒的环境下设置开机自启动,沙盒环境下没有测试过(设置方式不同,会比较复杂) 新建类,定义接口 void  ...

  6. 苹果计算机咋出记录,怎么查看Mac电脑的开机记录?

    可以使用last命令查看Mac电脑来看开机记录,同时也能查看关机记录. 首先打开mac的命令终端: 命令行终端敲入命令:last | grep reboot (查看开机时间记录) 命令行终端敲入命令: ...

  7. mac 设置mysql开机自启动

    mac 设置mysql开机自启动 1.编辑一个mysql启动文件. 在终端里面输入: sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist 2.输入 ...

  8. 令xtu3service开机时立即启动_Mac开机时可以使用的快捷键 苹果电脑快捷键使用介绍...

    大家都知道所有电脑在开机时,按住一些按键可以访问一些功能,当然Mac电脑也不例外.苹果电脑通过在开机启动时按住一个或多个按键可以访问一些Mac功能和工具.如果各位用户使用这些开机键组合键中的任何一个, ...

  9. MacBook Pro 15寸 Late 2013 更换2TB NVME硬盘利用Big Sur完美修复睡眠唤醒及开机时长问题

    回馈社区,分享一下我的MacBook Pro 15寸 Late 2013 更换2TB NVME硬盘后利用Big Sur的升级完美修复睡眠唤醒及开机时长问题的经验.第一次在CSDN发帖,感觉自己瞬间成为 ...

最新文章

  1. typeof操作符的返回值
  2. Ubuntu16.04安装Pycharm2017.2
  3. CMarkup类在VC中的使用
  4. 微型计算机实验报告温度控制,单片机、可编程控制器实验教学大纲.doc
  5. 反转!美光、英特尔等多家美企恢复对华为供货;首例云服务器存储侵权案改判,阿里云不担责;英国政府拟严格审查Libra……...
  6. ZooKeeper 到底解决了什么问题?
  7. php设置上传文件浏览按钮的样式和文字,文件上传按钮的用户自定义样式的实现...
  8. CC2530——点对点通信
  9. 扁豆凝集素LCA/LcH填料/小扁豆凝集素-琼脂糖凝胶/双花扁豆凝集素DBA/黑皮扁豆凝集素
  10. Tapestry介绍
  11. Gluster-Heketi-Kubernetes 安装步骤(以DaemonSet形式安装) Ubuntu 16.04
  12. 如何注册成为腾讯QQ互联个人开发者
  13. 第三周java实验报告
  14. 微信小程序相关知识点和云音乐项目制作遇到的问题及解决
  15. Qt之流式布局(FlowLayout)
  16. 响应式网页设计(3)
  17. 利用WIN10自带ACG播放器完成.flv视频文件转码为mp4文件
  18. java坦克大战的总结_《坦克大战》总结心得
  19. “爱心助农,你我同行”,周文强化身超级主播带货不停
  20. 贪吃蛇小游戏——C语言

热门文章

  1. 怪物猎人GU-武器派生整理之双刀篇
  2. 基础35 空心三角形
  3. 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 星系炸弹(日期推算)
  4. 如何在idea中配置JSTL
  5. yama搜集的超超…全的下载音效的网站,持续更新
  6. 灰度共生矩阵的生成和理解
  7. 中国剩余定理 即 孙子定理
  8. 2021年最火的前端框架
  9. 计算机更换硬盘键盘鼠标不好使,电脑键盘和主板不兼容解决方法
  10. 雷神的微软平台安全宝典---第二章 简介