Emacs: 自动插入翻译后的函数或变量名


#1

对于我这种英语渣来说, 有时候给一个函数或者变量取一个适当的名字还是比较麻烦的, 一般都要打开 Google 翻译, 翻译一段中文, 然后拷贝到 Emacs 中做各种修改, 改成下划线或者骆驼风格的形式.

今天给Emacs写了一个小插件 insert-translated-name

  1. 执行 insert-translated-name-insert 命令进入输入激活模式
  2. 正常输入中文
  3. 中文后输入空格自动查询翻译并替换成符合当前语言风格的变量名(或函数名)

insert-translated-name

如果当前光标在注释或者字符串区域, 会自动插入英文注释:

  1. 执行 insert-translated-name-insert 命令进入输入激活模式
  2. 正常输入中文
  3. 中文后输入空格自动查询翻译并替换成英文注释

如果你安装了 pyim 输入法,写英文注释的时候会自动激活切换输入法:

  1. 执行 insert-translated-name-insert 命令进入输入激活模式,并自动激活中文(不用手动切换中文输入法)
  2. 正常输入中文
  3. 中文后输入空格自动查询翻译并替换成英文注释(并自动切换成英文输入状态)

安装

  1. 下载 insert-translated-name 里面的 insert-translated-name.el 放到 ~/elisp 目录
  2. 把下面的配置加入到 ~/.emacs 中
(add-to-list 'load-path (expand-file-name "~/elisp"))
(require 'insert-translated-name)

使用

命令 描述
insert-translated-name-insert 按照当前语言风格自动插入翻译后的名字
insert-translated-name-insert-with-underline 按照下划线风格自动插入翻译后的名字
insert-translated-name-insert-with-camel 按照骆驼风格自动插入翻译后的名字
insert-translated-name-insert-with-line 按照连接线风格自动插入翻译后的名字
insert-translated-name-replace 按照当前语言风格自动替换中文为翻译后的名字
insert-translated-name-replace-with-underline 按照下划线风格自动替换中文为翻译后的名字
insert-translated-name-replace-with-camel 按照骆驼风格自动替换中文为翻译后的名字
insert-translated-name-replace-with-line 按照连接线风格自动替换中文为翻译后的名字

下面是各种语言预定的风格, 如果你不喜欢默认风格, 可以定制以下变量的内容:

(defvar insert-translated-name-line-style-mode-list
  '(web-mode emacs-lisp-mode))

(defvar insert-translated-name-camel-style-mode-list
  '(js-mode))

(defvar insert-translated-name-underline-style-mode-list
  '(ruby-mode))

自定义

默认使用 google.cn 翻译(不需要梯子), 如果你更喜欢有道, 修改 insert-translated-name-translate-engine 的值为 “youdao” 即可. Google 的长句翻译更加准确一点.

自己拯救自己的英语, 哒哒.


#2

抄了一下 @xuchunyang youdao-dictionary.el 的代码片段, 哈哈哈哈


#3

好 厉 害 啊


#4

好厉害啊……一定程度上解决了我变量命名强迫症的问题了


#5

不会的,中释英至少两三个可选


#6

不是啊,我记得我在哪个帖子里说过“我需要鱼而不是渔”。

所以说我就需要别人强塞给我的唯一的“鱼”。


#7

大神的黑科技真多


#8

这个插件只有一条从有道淘来的鱼,你不用纠结了,哈哈哈哈


#9

加了一个异步的补丁: https://github.com/manateelazycat/insert-translated-name/commit/30a670dc24d67084fe317911947a912fed02dc34

网络好的直接就插入翻译好的字符了, 网络延时太高自动复制到emacs粘贴板中, 直接 C-y 就可以粘贴出翻译.

全程不会因为查询翻译卡 emacs.


#10

真是懒人工具啊,如果是多条,可以弄个类似helm的界面让选择一下,一条也可以,让用户选择是否采用


#11

其实没有必要, 一条就够了.


#12

谁能写个插件,用户输入个需求,它就会自动插入实现代码


#13

有钱啥都可以,没钱就不要做梦了,哈哈哈哈


#14

有用 :+1: ,不过可能需要一个timeout控制或者插入位置的提醒


#15

报一个问题,insert-translated-name: Symbol’s function definition is void: remove-if ,我自己用 cl-remove-if 替换了。


#16

#17

我写了一个类似的函数:在字典查询结果窗口中,选择满意的释文,按 C-c c 插入到原文中。

做笔记查字典的时候可以用。


#18

https://github.com/manateelazycat/insert-translated-name/pull/1 牛人写了一个补丁, 可以异步同时请求N多个翻译, 然后继续写自己的代码, 等网络翻译回来以后, 会全自动自动替换需要翻译的地方.


#19

是不是可以不从minibuffer输入

直接buffer中获取

placeholder 可以设置display 让其隐藏吧

需要 require json 和 subr-x


#20

我在想一个更方便的玩法,今天晚上可以实现