参考 effective emacs中文版 来提升e

目录

快捷键

windows 换行符 \r\n 的 ^M 烦恼

undo redo

eshell

标签

更新emacs

查看CHM

看网页,凑活着用

各模式特有快捷键绑定

tab缩进

package 插件推荐用package安装

源码搜索

代码辅助

调试

邮件发送

ssh

yml

查看PDF

go-mode

typescript

java开发环境  lsp-mode lsp-java

有道翻译

windows 相关

emacs 在ubuntu下中文 搜狗输入法有时候无法激活

centos 输入中文


macs


快捷键

C-\      关闭输入法

C-h k  再输入一个快捷键  查看这个快捷键绑定了什么函数

C-h w 查看函数绑定了哪些快捷键        通常可以先C-h f查看当前快捷键绑定了哪个函数,再看看这个函数绑定了哪些快捷键,这样可以选出替代的较好的快捷键。

C-h b  列举所有绑定的快捷键

C-h f   查看函数帮助

C-h m 查看本modes下的帮助

C-x m  发邮件

C-x 1   清除所有分屏

C-x 3   增加一个横屏

C-x o   分屏间切换

C-x b   跳转到指定 buffer,  若输入的文件不存在,则开启草稿本,很实用

C-x C-b  列举所有打开的buffer

C-x s    保存文件

C-x k 杀灭buffer

很干脆的杀buffer,不想每次回答个 yes or no 之类的

(global-set-key "\C-xk" #'(lambda () (interactive) (kill-buffer (current-buffer))))

C-w 来删一个词 backspace 实在太远了.   剪切就用 C-x C-w 替代

(global-set-key "\C-w" 'backward-kill-word)
(global-set-key "\C-x\C-w" 'kill-region)

C-M-n   转到大括号结束

C-M-p   转到大括号开始

C-M-a   转到上一个函数

C-M-e   转到下一个函数

C-u space  本页面回到跳转处  用于跳转后本页面返回

C-x space  跨页面回到跳转处   用于跳转后跨页面返回

C-a   移动到行首

C-e   移动到行尾

C-p   上一行

C-n   下一行

C-l     光标行调整到屏幕中间 再按光标行成为最高行 再按成为最低行

(global-set-key "\C-xg" 'goto-line)
(global-set-key "\C- " 'set-mark-command)
(global-set-key "\M- " 'set-mark-command)

M-x    执行外部命令

C-x C-m  也被我绑定成了 M-x

C-x C-e   执行lisp 函数

C-u C-x C-e 执行lisp函数,结果回写到当前buffer

C-u 10  C-n  向下移动10行

这2个不光用于增量搜索,主要用于快速到达文本的某处,C-n   C-p 移动光标实在太慢了

C-r        向前增量搜索

C-s       向后增量搜索

复制当前行

(defun copy-line (arg)"Copy lines (as many as prefix argument) in the kill ring"(interactive "p")(kill-ring-save (point)(line-end-position))(message "%d line%s copied" arg (if (= 1 arg) "" "s")))(global-set-key "\C-o" 'copy-line)

打开文件并跳转到指定行

(defun goto-file-line(filename line)(find-file filename)(goto-line line))

录制宏

C-x (    开始录制

.....此处为宏的操作

C-x)     结束录制

执行宏

1、C-x e               执行1次

2、C-u 10 C-x e   执行10次

windows 换行符 \r\n 的 ^M 烦恼

(defun remove-dos-eol ()
"Do not show ^M in files containing mixed UNIX and DOS line endings."
(interactive)
(setq buffer-display-table (make-display-table))
(aset buffer-display-table ?\^M []))
(add-hook 'c++-mode-hook 'remove-dos-eol)
(add-hook 'typescript-mode-hook 'remove-dos-eol)

undo redo

Emacs下面的redo就是用undo的undo实现的.
比如删了一个字符, 然后用C-/ undo了, 但你后面又想删掉这个字符(也就是redo), 这时你可以先使用一个非编辑命令(如C-f), 再用C-/就是redo了.

eshell

M-x  eshell    打开

(eshell 2)      开启多个eshell
(eshell 3)      开启多个eshell

eshell

cd some-folder/       可以把 cd 去掉 直接输入 文件夹名称

cd =   罗列最近访问过的文件路径

cd -2  切换到cd = 列出的序号为2的目录

别名示例

alias rm 'rm -f $*'

可以打开别名文件自己编辑 别名文件   ~/.emacs.d/eshell/alias

打开后自己编辑,保存后重启eshell即可

我的别名文件参考

alias d dired $1
alias kubectl kubectl -s http://192.168.255.130:8080 $*
alias cdm cd /home/wangjunsheng/memo

标签

C-x r b   跳转到指定的书签

C-x r l     列举所有书签

删除, 先列举所有书签  然后 D 然后 x

C-x r m   添加书签

更新emacs

Installing_Emacs_on_GNU/Linux

sudo add-apt-repository ppa:ubuntu-elisp/ppa
sudo apt-get update
sudo apt-get install emacs-snapshot emacs-snapshot-el

这是在电脑上装了个新emacs, 老的并没有消失

我升级到 27版本后 遇到了 find-file  无法 tramp 的问题,

就是/sudo::localhost/etc/hosts 之类的路径在新版的emacs默认不支持了

需要在 .emacs 中显式开启

(require 'tramp)

查看CHM

archmage 可以解析chm文件,并伪装成HTTP服务器。于是我们可以用浏览器查看chm。

ubuntu 安装

sudo apt-get install archmage

作为HTTP服务器使用

archmage -p 7777 APUE.chm

也可以把 chm 转换成 text文件

需要安装 elinks

sudo apt-get install elinks

装好后执行 text 转换

archmage --convert=text APUE.chm

同目录下会生成 APUE.txt 文件

emacs 下查看 chm , 需要装 ChmView。

ChmView是为archmage定制的视图,方便在emacs上显示。

安装

切换到你的 emacs 常用插件目录,获取  chm-view.el 文件

wget https://www.emacswiki.org/emacs/download/chm-view.el

安装 w3m

sudo apt-get install w3m w3m-img

手动下载 https://github.com/wanderlust/ 的 apel  和  flim    放到emacs能加载的目录

然后下载 https://github.com/emacs-w3m/emacs-w3m

autoconf
./configure
make

把 emacs-w3m 也放到emacs能加载的目录去

最后修改.emacs配置, 路径不一样相同,自己改成合适的

(add-to-list 'load-path "~/emacs/emacs-w3m/shimbun")
(add-to-list 'load-path "~/emacs/emacs-w3m")
(require 'w3m-load)
(setq browse-url-browser-function 'w3m-browse-url)
(defalias 'w3 'w3m-browse-url)

最后用 chm-view-file   APUE.chm

来访问

看网页,凑活着用

eww www.qq.com

F1 查看man

(global-set-key[(f1)](lambda()(interactive)(man(current-word))))

各模式特有快捷键绑定

M x 模式名字  切换当前buffer的模式  比如  c++-mode

之前 vs va用惯了 Alt+g 代码跳转,所以无论是go 还是 js 还是 c 我都把 跳转的快捷键设成这个

(define-key go-mode-map [(meta ?g)] 'godef-jump)

(define-key emacs-lisp-mode-map [(meta ?g)] 'find-function)

tab缩进

(setq indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(setq default-tab-width 4)

package 插件推荐用package安装

国内源,我用的是清华的

(setq package-archives '(("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
                         ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))

本文后面提及的各种 插件, 全部推荐用 package 方式安装

非常方便快捷,都是一键安装

设个国内源,然后刷新下 当前有哪些插件可以安装

package-refresh-contents

然后在页面里找到想要安装的 插件 安装即可

源码搜索

git grep xxx  (这个和 emacs 无关,  借助 git 自带的 grep 来搜索)

ag 安装 用法

先安装 ag

sudo apt-get install silversearcher-ag

再安装 emacs 的 ag 插件

M-x package-install ag

参考后面的 package包管理介绍

最后设置 ag的快捷键  Ctrl-Alt-f

(global-set-key "\C-\M-f" 'ag-files)

代码辅助

(semantic-mode)     开启

(global-set-key [(meta ?g)] 'semantic-ia-fast-jump)

C - i   代码格式化

M-/    代码补全

通常源码会分布在很多的文件夹下,要把这些目录加到 补全的搜索路径中 就可以跳转了

(defun vpath_for_gateway () (interactive)
(semantic-add-system-include "~/work/lora/simulator/base" 'c-mode)
(semantic-add-system-include "~/work/lora/simulator/3rd" 'c-mode)
)

(vpath_for_gateway)    C-x C-e 执行下

调试

M-x gdb

gdb -i=mi exename  // 默认的 程序名字自己换

也许还要

M-x gdb-many-windows  // 进入多窗口页面

b file.c:6
b function_name
b line
d 1 删除断点
r 可以带参数
n 下一行
s 进入行数
p 显示变量值
p /x 16进制显示
p *array@6
c 继续
quit 退出
info threads  查看所有的线程
thread id     切换到id指定的线程
t id          t  thread 的简写
backtrace     查看调用堆栈
frame N:切换到栈编号为N的上下文中
emacs 下调试,  直接用鼠标点击调用堆栈即可

邮件发送

(setq send-mail-function (quote smtpmail-send-it))
(setq smtpmail-smtp-server "192.168.0.10")
(setq smtpmail-smtp-service 25)
(setq user-full-name "wangjunsheng")
(setq user-mail-address "wangjunsheng@xxx.xx")

根目录 .authinfo 文件中配置账号信息

~ $ cat .authinfo 
machine 192.168.0.10 login xxx@xxx.cn port 25 password xxx

C-x m  编写邮件

C-c C-c 发送邮件

指定文件后缀用 哪种mode 打开

(add-to-list 'auto-mode-alist (cons "\\.message\\'" 'message-mode))

(add-to-list 'auto-mode-alist (cons "\\.h\\'" 'c++-mode))

更新到27.0.50版后 还要加下面两个配置

(setq smtp-server "192.168.0.10")
(setq smtp-fqdn "zlg.cn")

ssh

如果是新版的emacs, 还得在 .emacs 中加上

(require 'tramp)
本地root权限
(find-file "/sudo:localhost:")第一次要 C-f C-x 下运行
(find-file "/ssh:username@192.168.0.2:")
(find-file "/ssh:username@192.168.0.2|sudo:192.168.0.2:")
注意: 中间不能有空格

terminal下运行ssh 后启动远程机器的emacs

我通过下面的设置让远程机器的emacs在terminal下全屏

;;设置窗口位置为屏库左上角(0,0)
(set-frame-position (selected-frame) 0 0)
;;设置宽和高,我的十寸小本是110,33,大家可以调整这个参数来适应自己屏幕大小
(set-frame-width (selected-frame) 150)
(set-frame-height (selected-frame) 45)
;;稍微改了下背景色

(set-background-color "white") 
(set-foreground-color "black")

yml

编辑yml 文件 好歹有个语法高亮嘛

下载, 在你安装emacs插件的目录下载, 我的插件都放在 ~/emacs/下 , 所以我在 ~/emacs 目录下运行 git clone

git clone https://github.com/yoshiki/yaml-mode.git
(add-to-list 'load-path "~/emacs/yaml-mode")
(require 'yaml-mode)
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
(setq yaml-indent-offset 4)

查看PDF

apt-get install ghostscript
apt-get install xpdf

可以试试

C-c C-t 进入 PDF 的文本模式

文本方式查看PDF,相当爽啊

M-x doc-view-mode 切换回 PDF 默认查看模式

go-mode

推荐用 package 安装  参考本文前面的 package, 先设置好源

M-x list-package

  go-mode            20200425.1740 available  melpa      Major mode for the Go programming language

点击 go-mode 安装即可。

(require 'go-mode)
(define-key go-mode-map [(meta ?g)] 'godef-jump)

(custom-set-variables '(gofmt-command "goimports"))
(define-key go-mode-map "\C-c\C-f" 'gofmt)

我把 gofmt  改成了 goimports  它不仅会格式化 还会自动控制 import

go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v github.com/rogpeppe/godef

typescript

安装

M-x package-install RET tide RET

如果 tide 找不到 或 不存在, 请添加

(add-to-list'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
然后在输入 M-x package-refresh-contents,刷新package信息

安装过程中 请耐心等待  挺久的。。。。 有次我不小心点了下 ctrl+G ,结果安装了个半成品。坑死了。

安装过程中 emacs 处于假死状态。

装好后 如下配置 .emacs 文件

(require 'tide)
(defun setup-tide-mode ()(interactive)(tide-setup)(flycheck-mode +1)(setq flycheck-check-syntax-automatically '(save mode-enabled))(eldoc-mode +1)(tide-hl-identifier-mode +1);; company is an optional dependency. You have to;; install it separately via package-install;; `M-x package-install [ret] company`(company-mode +1));; aligns annotation to the right hand side
(setq company-tooltip-align-annotations t);; formats the buffer before saving
(add-hook 'before-save-hook 'tide-format-before-save)(add-hook 'typescript-mode-hook #'setup-tide-mode)(setq typescript-indent-level 2);; 我喜欢用 alt+g 跳转
(define-key tide-mode-map [(meta ?g)] 'tide-jump-to-definition)
;; 用习惯了 C-x C-SPC 跳转回去
(define-key tide-mode-map (kbd "C-x C-SPC") 'tide-jump-back)

java开发环境  lsp-mode lsp-java

1. 安装java,  emacs代码补全 lsp-java 基于 jdtls, 我下到的jdtls 基于 java11以上,  所以我按装java11。 而团队用到的是java8,  所有 java8 和 11 我同时安装了

java8
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install openjdk-8-jdkjava11
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt install openjdk-11-jdk配置下环境变量, 我改的是下面的文件
/etc/environment
根据自己的路径修改
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
CLASSPATH=.:/usr/lib/jvm/java-8-openjdk-amd64/lib:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/etc/environment 的修改要重新登陆下系统才能生效
classpath 有没有配置对可以验证的。
写个简单的helloworld. javac 后, 把生成的 helloworld.class 文件
拷贝到 CLASSPATH的第二个或第三个路径中,
比如我的 我拷贝到 /usr/lib/jvm/java-8-openjdk-amd64/lib 下
然后在其余任意目录 java helloworld, 可以正常执行,即可。 如果提示找不到class, 就说明 CLASSPATH 配置的有问题

2. 安装 maven,  java的工程管理工具

我是去下面这个网站找的 压缩包
https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar zxvf apache-maven-3.6.3-bin.tar.gzsudo mkdir /usr/local/maven
sudo mv apache-maven-3.6.3 /usr/local/maven/
/etc/environment 的 PATH 加上  /usr/local/maven/apache-maven-3.6.3/bin
再加个环境变量
MAVEN_HOME=/usr/local/maven/apache-maven-3.6.3
重登录系统

3. 下载 jdtls, 代码解析就是靠的这个

wget https://download.eclipse.org/jdtls/snapshots/jdt-language-server-1.5.0-202109201721.tar.gzmkdir -p ~/soft/jdt-language-server
把 jdt-language-server-1.5.0-202109201721.tar.gz 拷贝到上面这个目录
tar zxvf jdt-language-server-1.5.0-202109201721.tar.gz我解压到了下面这个目录,
~/soft/jdt-language-server $ ls
config_linux  config_ss_linux  config_ss_win  features
config_mac    config_ss_mac    config_win     plugins

有一次用着用着, jdtls 启动就秒退

删除jdt-language-server 目录后,随便打开一个java文件,重装 jdtls 失败, 然后我手动重新解压下载好的  jdt-language-server-1.5.0-202109201721.tar.gz,  还是解压到那个目录。

神奇地修好了 :)

4. 安装 lsp-mode

M-x package-install lsp-mode
如果提示找不到, 就
M-x package-refresh-contents
M-x package-list-packages
中找到 lsp-mode 安装

5、 安装 lsp-java

M-x package-install lsp-java

6. 安装 use-package

M-x package-install use-package 

7.  配置 .emacs

注意: 我前面安装好的 jdtls, 通过 (setq lsp-java-server-install-dir "~/soft/jdt-language-server")

设置到了 lsp-java 中

(require 'lsp-java)
(add-hook 'java-mode-hook #'lsp)(setq lsp-java-server-install-dir"~/soft/jdt-language-server")
(require 'use-package)
(setq use-package-always-ensure t)
(use-package projectile)
(use-package flycheck)
(use-package yasnippet :config (yas-global-mode))
(use-package lsp-mode :hook ((lsp-mode . lsp-enable-which-key-integration)):config (setq lsp-completion-enable-additional-text-edit nil))
(use-package hydra)
(use-package company)
(use-package lsp-ui)
(use-package which-key :config (which-key-mode))
(use-package lsp-java :config (add-hook 'java-mode-hook 'lsp))
(use-package dap-mode :after lsp-mode :config (dap-auto-configure-mode))
(use-package dap-java :ensure nil)
(use-package helm-lsp)
(use-package helm:config (helm-mode))
(use-package lsp-treemacs)(define-key java-mode-map [(meta ?g)] 'lsp-find-definition)

8. 大功告成

我换了个29版本的emacs,一直提示  File mode specification error: (void-function -compose)

安装 dash 后,重启 emacs 可以

注意,存放工程或文件的路径中不要有java,否则无法创建代码解析

打开 spring-boot 工程中的某个文件就可以了

9. 问题

DemoApplication.java is a non-project file, only syntax errors are reported

M-x  lsp-workspace-folders-remove   输入当前工程目录

重新打开java文件

提取悬停错误信息  M-x flycheck-list-errors

有道翻译

在.emacs配置文件中加入如下配置:

(require 'package)
(package-initialize)
(add-to-list'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
然后在输入 M-x package-refresh-contents,刷新package信息

然后安装

https://github.com/xuchunyang/youdao-dictionary.el

M-x package-install RET youdao-dictionary RET

再配下 .emacs 加点快捷键之类的

;; Enable Cache
(setq url-automatic-caching t);; Example Key binding
(global-set-key (kbd "C-c i") 'youdao-dictionary-search-from-input)
(global-set-key (kbd "C-c u") 'youdao-dictionary-search-at-point)

windows 相关

windows HOME 路径设置

打开注册表,添加注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs

在这个路径下面新建值:HOME, 值是 C:\

启动windwos程序

(browse-url "calc.exe")  ;; 计算器

(browse-url "c:/Program Files/TTC/TotalCMD.exe") ;; totalcmd

改键

可以不用改了,利用手掌边缘来按机械键盘的ctrl 蛮好用的

[windows平台现在用一个叫remapkey.exe的程序可以轻松实现了]

Caps Lock 改为 Ctrl  保护小拇指,提升效率,   Caps Lock 不要了

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

在右侧右键新建, 选择"二进制值", 名称为: "Scancode Map"

emacs 在ubuntu下中文 搜狗输入法有时候无法激活

~/.bashrc 中加入下面这行,重启    (没有严格测试,但这样搞了后,我电脑的可以激活了)

和/etc/profile 都加入下面这个

(find-file "/sudo:localhost:/etc/profile")

export LC_CTYPE=zh_CN.UTF-8

安装sogou输入法

sogou切换时,如果出现乱码, sogou pinyin 不要放最前面即可

centos 输入中文

/etc/environment 中加入

LC_CTYPE="zh_CN.UTF-8"

然后用root账户登录,之后再重启电脑

字体,在 菜单  options的 set default font 中选择自己喜欢的。

然后 M-x describe-font

拷贝 字体描述。写到 .emacs 文件中, 我在centos下的 字体配置如下

(set-default-font "-bitstream-Bitstream Charter-normal-normal-normal-*-16-*-*-*-*-0-iso10646-1")

附录, 新装ubuntu系统

系统配置 软件更新 里面 配置下 选个国内源

docker

sudo apt-get update
sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io(oo "/sudo:localhost:/etc/docker/daemon.json")
后面两个 log-driver 和 log-opts 选项 是为了控制 docker console 日志类型和最终文件大小的
{"registry-mirrors": ["https://hccwwfjl.mirror.aliyuncs.com"],"insecure-registries": ["192.168.13.一些用http 的ip, 没有就不填"],"log-driver":"json-file","log-opts": {"max-size":"100m", "max-file":"3"}
}systemctl restart docker

emacs

sudo apt-get install emacs
sudo apt-get install silversearcher-ag
~/.emacs 就用附录里那个,  已经配置好了国内的 package 源
M-x package-refresh-contents
M-x package-install agM-h 添加
(require 'tramp)

system settings 里的 keyboard 吃掉了个 alt+space

输入法 吃掉了个 ctrl +alt+p

附录,我的emacs配置,方便自己拷贝 有些地方不完善

(desktop-save-mode 1)
(server-start)(add-to-list 'default-frame-alist '(width . 205))
(add-to-list 'default-frame-alist '(height . 65))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(left . 0))(require 'package)
(package-initialize)
;;(add-to-list'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(setq package-archives '(("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")));;设置窗口位置为屏库左上角(0,0)
(set-frame-position (selected-frame) 0 0)
;;设置宽和高,我的十寸小本是110,33,大家可以调整这个参数来适应自己屏幕大小
(set-frame-width (selected-frame) 205)
(set-frame-height (selected-frame) 65)(set-default-font "-DAMA-Ubuntu Mono-normal-normal-normal-*-17-*-*-*-m-0-iso10646-1")(if (< emacs-major-version 23)(progn(set-terminal-coding-system 'chinese-iso-8bit)(set-keyboard-coding-system 'chinese-iso-8bit)(setq locale-coding-system 'chinese-iso-8bit)(prefer-coding-system 'chinese-iso-8bit))(progn(set-terminal-coding-system 'utf-8) ;(set-keyboard-coding-system 'utf-8)(setq locale-coding-system 'utf-8)(prefer-coding-system 'utf-8)))
(setq Info-scroll-prefer-subnodes nil) ;info scrolling
(setq inhibit-startup-message t) ;no starup message
(setq-default indent-tabs-mode nil)(setq display-line-number-format "%4d| ")
(setq uniquify-buffer-name-style 'reverse)
(ido-mode 1)
(icomplete-mode 1)
(global-font-lock-mode t) ;better color(custom-set-faces;; custom-set-faces was added by Custom.;; If you edit it by hand, you could mess it up, so be careful.;; Your init file should contain only one such instance.;; If there is more than one, they won't work right.'(default ((t (:inherit nil :stipple nil :background "#d3d7cf" :foreground "#000000" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 128 :width normal :foundry "DAMA" :family "Ubuntu Mono"))))'(highlight ((t (:background "darkseagreen2")))))(transient-mark-mode 0)
(setq scroll-preserve-screen-position nil)
(show-paren-mode t)
(tool-bar-mode 0)
(global-hl-line-mode nil)
(setq-default truncate-lines t)(defalias 'switch-to-next-buffer 'bury-buffer)
(defun switch-to-previous-buffer ()(interactive)(switch-to-buffer (nth (- (length (buffer-list)) 1) (buffer-list))))
(global-set-key [C-tab] 'switch-to-previous-buffer)
(global-set-key [C-S-iso-lefttab] 'switch-to-next-buffer)(blink-cursor-mode 0)
(fringe-mode (cons 3 3))(setq indent-tabs-mode nil)
(setq c-default-style "linux")
(setq c-basic-offset 4)
(setq tab-stop-list())
(setq default-tab-width 4);(setq inverse-video t);(setq mode-line-inverse-video t)
(setq default-major-mode 'text-mode)
(setq display-time-day-and-date t)
(display-time)(global-set-key [(control ?x) (meta ? )] 'pop-global-mark)
(global-set-key [(meta ?h)] #'(lambda () (interactive) (find-file "~/.emacs")))
(global-set-key "\C-xg" 'goto-line)
(global-set-key "\C-w" 'backward-kill-word)
(global-set-key "\C-x\C-w" 'kill-region)
(global-set-key "\C- " 'set-mark-command)
(global-set-key "\M- " 'set-mark-command)
(global-set-key "" (quote set-mark-command))
(global-set-key "\C-xk" #'(lambda () (interactive) (kill-buffer (current-buffer))))
(global-set-key "\C-x\C-k" #'(lambda () (interactive) (kill-buffer (current-buffer))))
(global-set-key [(control ?=)] 'call-last-kbd-macro)
(defalias 'yes-or-no-p 'y-or-n-p)
(global-set-key [(control down)] #'(lambda () (interactive) (scroll-up 1)))
(global-set-key [(control up)] #'(lambda () (interactive) (scroll-down 1)))(global-set-key "\C-z" 'ignore)
(global-set-key "\C-x\C-z" 'iconify-or-deiconify-frame)
(global-set-key "\C-xp" #'(lambda () (interactive) (other-window -1)))(global-set-key [insert] 'ignore)
(global-set-key [(control ?x) insert] 'overwrite-mode)(global-set-key "\C-cp" 'anything)
(global-set-key "\C-co" 'occur)
(global-unset-key "\C-xf")
(global-set-key "\C-x\C-b" 'ibuffer)(global-set-key "\C-x\C-m" 'execute-extended-command)
(global-set-key "\C-xj" #'(lambda() (interactive) (find-file "~/memo/shortcut")))(defalias 'op 'find-file)
(defalias 'oo 'find-file-other-window)
(defalias 'opo 'find-file-other-window)
(defalias 'qrr 'query-replace)
(defalias 'rstr 'replace-string)
(defalias 'ptm 'pop-to-mark-command)
(defalias 'emacs 'open)(global-set-key "\C-c\M-b" 'pop-to-mark-command)
(global-set-key (kbd "C-c C-b") 'browse-kill-ring)
(global-set-key "\C-xx" 'hippie-expand)
(global-set-key "\247" (quote hippie-expand))(add-to-list 'auto-mode-alist (cons "\\.css\\'" 'css-mode))
(add-to-list 'auto-mode-alist (cons "\\.h\\'" 'c++-mode))
(add-to-list 'auto-mode-alist (cons "\\.ts\\'" 'javascript-mode))(defalias 'switch-to-next-buffer 'bury-buffer)
(defun switch-to-previous-buffer ()(interactive)(switch-to-buffer (nth (- (length (buffer-list)) 1) (buffer-list))))
(global-set-key [C-tab] 'switch-to-previous-buffer)
(global-set-key [C-S-iso-lefttab] 'switch-to-next-buffer);;Îļþ¸ñʽת»»
(defun dos-unix () (interactive)(goto-char (point-min))(while (search-forward "\r" nil t) (replace-match "")))
(defun unix-dos () (interactive)(goto-char (point-min))(while (search-forward "\n" nil t) (replace-match "\r\n")))(defun maximize-frame ()"×î´ó»¯×Ô¼ºµÄ´°Ìå"(interactive) (w32-send-sys-command #xf030))(defvar jr-a-temporary-point);additional function À©Õ¹¹¦Äܺ¯Êý
(defun remember-a-temporary-point ()"Joyer's temporary mark-command"(interactive)(make-local-variable 'jr-a-temporary-point)(message "a new Joyer's mark is setted.")(setq jr-a-temporary-point (copy-marker (point-marker))))
(defun back-to-a-temporary-point ()"Go back to Joyer's temporary mark-command"(interactive)(make-local-variable 'jr-a-temporary-point)(when jr-a-temporary-point(let ((old jr-a-temporary-point))(message "pop from Joyer's mark.")(setq jr-a-temporary-point (copy-marker (point-marker)))(goto-char old))))
(global-set-key (quote [3 67108921]) (quote remember-a-temporary-point));"C-cC-9"
(global-set-key (quote [3 67108920]) (quote back-to-a-temporary-point)) ;"C-cC-8"(global-set-key[(f1)](lambda()(interactive)(man(current-word))))
(global-set-key [(meta ?g)] 'semantic-ia-fast-jump)
(global-set-key [(control ?')]  'semantic-ia-complete-symbol)(add-to-list 'load-path "~/.emacs.d")
(defun copy-line (arg)"Copy lines (as many as prefix argument) in the kill ring"(interactive "p")(kill-ring-save (point)(line-end-position))(message "%d line%s copied" arg (if (= 1 arg) "" "s")))(global-set-key "\C-o" 'copy-line)(global-set-key "\C-\M-f" 'ag-files)(global-set-key "\C-x\C-d" 'ido-dired)(defun goto-file-line(filename line)(find-file-other-window filename)(goto-line line))
(defalias 'ol 'goto-file-line)

emacs 常用用法相关推荐

  1. emacs常用操作笔记

    Table of Contents 1. emacs操作 1.1. emacs ecb 常用操作 1.2. 与文件操作有关的命令 1.3. 与光标移动操作有关的命令 1.4. 与文件删除操作有关的命令 ...

  2. 【Android 异步操作】Handler 机制 ( Handler 常用用法 | HandlerThread 简介 | HandlerThread 源码注释分析 )

    文章目录 一.Handler 常用用法 二.HandlerThread 简介 三.HandlerThread 源码 一.Handler 常用用法 主线程 Handler 主要作用 : Looper 和 ...

  3. 【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )

    文章目录 一.Timer 定时器基本使用 二.Timer 定时器常用用法 三.Timer 源码分析 四.Timer 部分源码注释 五.源码及资源下载 参考文档 : Timer 定时器 API 文档 T ...

  4. 【Kotlin】Kotlin enum 枚举类 ( 常用用法 | 初始化成员变量 | 实现抽象方法 | 实现接口 | 获取名称和位置索引 | 调用枚举常量方法 )

    文章目录 I . 枚举类常用用法 II . 枚举类初始化 III. 枚举类匿名类 IV . 枚举类实现接口 V . 获取枚举常量名称和位置索引 VI . 获取枚举常量的成员变量 VII . 调用枚举常 ...

  5. Python中的基本函数及其常用用法简析

    分享Python中的基本函数及其常用用法简析,首先关于函数的解释函数是为了达到某种目的而采取的行为,函数是可重复使用的,用来实现某个单一功能或者功能片段的代码块,简单来说就是由一系列的程序语句组成的程 ...

  6. 【Data Mining】机器学习三剑客之Numpy常用用法总结

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自AI蜗牛车,禁二次转载 一.前言 玩数据分析.数据挖掘.AI的都知道这个pyt ...

  7. grep参数说明及常用用法

    grep参数说明及常用用法 查看文件内容 [kou@localhost ~]$ more size.txt b124230 b034325 a081016 m7187998 m7282064 a022 ...

  8. [转]ssh常用用法小结

    ssh常用用法小结 1.连接到远程主机: 命令格式 : ssh name@remoteserver 或者 ssh remoteserver -l name 说明:以上两种方式都可以远程登录到远程主机, ...

  9. 关于grep,egrep正则表达式的常用用法

    正则表达式是一类字符所书写的模式(pattern) 元字符:不表示字符本身的意义,而用于额外功能性的描述:而如果在这些特定的字符前加/这个符号那么这些字符就表示原有的意思. 正则表达式:基本正则表达式 ...

最新文章

  1. Ruby 之 Block, Proc, Lambda 联系--区别,转载
  2. 不止狂卖芯片,英伟达也飙了新算法:用AI生成逼真的虚假名人照,可用于万物
  3. python学习之面向对象(三)
  4. ICML论文|这违反直觉的“升噪”方法,反而能很好的解决激活函数梯度弥散的问题
  5. Oracle--序列和触发器的使用
  6. Spring MVC测试框架入门–第1部分
  7. C# PagedList 真分页
  8. python子类继承父类特性,pycharm上面已经提示继承了,为什么会报没有该特性的错误?
  9. dbscan算法c语言实现,用C++实现DBSCAN聚类算法
  10. 取消对 null 指针“l”的引用。_彻底理解链表中为何使用二级指针或者一级指针的引用...
  11. 计算机病毒实践汇总六:IDA Pro基础
  12. ValidateAntiForgeryToken的用途,解释和示例
  13. C#多线程之线程同步篇2
  14. 2020 年省份数据拉取
  15. Android MPAndroidChart之柱状图BarChart
  16. Android 如何隐藏应用程序的图标
  17. 使用NoSQLBooster for MongoDB连接远程服务器
  18. 记录一次心脏滴血靶场实验过程
  19. Axure 9 实战案例,动态面板的应用 5,官网首页自动轮播广告
  20. java学习资源第二弹,持续更新方便你我

热门文章

  1. java 扫码下载_扫码支付 扫码支付Java直接使用的压缩包 联合开发网 - pudn.com
  2. 转型迫在眉睫 村镇银行应努力去拥抱金融科技
  3. 打印心形图案---程序猿才有的浪漫---入门级---C语言实现
  4. 陌陌还没找到“解药”​
  5. 六角形python代码_python六角形
  6. 湖北汽车工业学院Linux期末复习
  7. 大学生注意了,快记下这些考证时间
  8. 人这辈子,最大的敌人不是别人,正是自己
  9. 北大叉院计算机考研经验贴(408)
  10. 《Self-supervised Complex Network for Machine Sound Anomaly Detection》论文阅读