October 30, 2019
By: 马海强
emacs上使用px转换vw插件
因为emacs缺少一个插件已经影响了前端同学对emacs的兴趣了,这有点尴尬,其实emacs很强大的。 对标vs code的px2vw插件,实现了一个简易的相似功能的emacs插件。 需求被大神知道后重写了一个可以支持对选中区域转换的,使用方式如下。
配置
在~/emcas.d/lisp/自件一个名为px2vw.el文件,将以下代码复制进去,保存。
;;; A emcas plugin to convert px to vw.
(defun region-px->vw (pos1 pos2)
"当前选中region或者paragraph中的px转化为vw,可能还需要考虑:
1.1px的情况
2.其他我不知道的规则"
(interactive ;; interactive函数生成本函数的参数1. 开始位置 2. 结束位置; 考虑两种情况:region 和 paragraph
(if (use-region-p) ;; 是否用户已经选择了某个region
(list (region-beginning) (region-end))
(let ((bds (bounds-of-thing-at-point 'paragraph)) ) ;;如果不是region的话,找到当前paragraph
(list (car bds) (cdr bds)))))
(save-restriction ;;保证替换操作不影响开始和结束位置
(narrow-to-region pos1 pos2) ;; 设定我们关心的一个范围,此范围以外的文本我们不关心
(goto-char (point-min)) ;; 回到关心区域的起始位置
(while (search-forward-regexp "\\([0-9.]+\\)\\(px\\)" nil t) ;; 正则查找,注意我们以后两个分组,第一个分组获得数值
(let* ((px-digit-str (match-string 1)) ;; 从第一个分组拿到数值
(px-digit (string-to-number px-digit-str)) ;; 数值->string
(vw-digit (format ;; 计算
"%.4f"
(/
(* 100.0 px-digit)
1440.0))))
(replace-match (concat vw-digit "vw") t nil))))) ;;替换Hello!
(provide 'px2vw)
在~/.emcas.d/custom.el文件里添加如下代码:
(require 'px2vw)
(global-set-key (kbd "C-c w") 'region-px->vw)
如果这个操作很常用的话,也可以定义一个更简洁的快捷键,比如F9,那就将上面的第二行换成
(global-set-key [f9] 'region-px->vw)
重启emcas。
使用
手工选取区域
选中需要转换的代码区域,按下你设置的快捷键,将执行绑定的函数,这会把比如200px;换算成13.8889vw保留了4位小数点,替换掉原来的以px为单位的代码。
自动判断段落
如果没有选中区域,将替换当前光标所在段落(大括号)内容里的px。
效果
手工选取区域

自动判断段落

局限说明
- 目前插件内置了宽度是1440,如果需要修改,也很简单,把
px2vw.el的1440.0改成你需要的值。 - 鉴于vh很少用到,因此没有实现,需要的时候手动计算下。