我也说说Emacs吧(3) - 文件基本操作
Spacemacs文件基本操作
有了前两讲的积累,我们知道了:
1. 我们既要学习emacs的操作,也要学习vi的操作
2. emacs是一个可扩展的平台,我们并不是从头配置,而是使用一套成熟的集成方案,spacemacs. spacemacs已经集成好了很多插件,比如模拟vi的evil,自动补全的ido等
3. emacs本质上是一些函数的组合,通过Alt-x执行函数名,或者通过绑定到快捷键上使用,其本质是一样的
有了以上基础知识,我们正式开始学习emacs. 我们先从最简单的打开和保存文件开始。
文件打开和保存
打开文件
emacs的标准做法是使用find-file函数,绑定在C-x C-f键上。
在spacemacs中,曾经默认将C-x C-f绑定到ido-find-file上。而现在,C-x C-f绑定到spacemacs/helm-find-files上:
(defun spacemacs/helm-find-files (arg)
"Custom spacemacs implementation for calling helm-find-files-1.
Removes the automatic guessing of the initial value based on thing at point. "
(interactive "P")
(let* ((hist (and arg helm-ff-history (helm-find-files-history)))
(default-input hist)
(input (cond ((and (eq major-mode 'dired-mode) default-input)
(file-name-directory default-input))
((and (not (string= default-input ""))
default-input))
(t (expand-file-name (helm-current-directory))))))
(set-text-properties 0 (length input) nil input)
(helm-find-files-1 input)))
也可以通过『空格 f f』的方式来使用spacemacs/helm-find-files.
可能通过【空格 f F】的方式来直接使用helm插件包中的helm-find-files:
(defun helm-find-files (arg)
(interactive "P")
(let* ((hist (and arg helm-ff-history (helm-find-files-history)))
(smart-input (or hist (helm-find-files-initial-input)))
(default-input (expand-file-name (helm-current-directory)))
(input (cond (helm-find-file-ignore-thing-at-point
default-input)
((and (eq major-mode 'org-agenda-mode)
org-directory
(not smart-input))
(expand-file-name org-directory))
((and (eq major-mode 'dired-mode) smart-input)
(file-name-directory smart-input))
((and (not (string= smart-input ""))
smart-input))
(t default-input)))
(input-as-presel (null (nth 0 (file-attributes input))))
(presel (helm-aif (or hist
(and input-as-presel input)
(buffer-file-name (current-buffer))
(and (eq major-mode 'dired-mode)
smart-input))
(if (and helm-ff-transformer-show-only-basename
(null hist))
(helm-basename it) it))))
(set-text-properties 0 (length input) nil input)
(helm-find-files-1 input (and presel (null helm-ff-no-preselect)
(concat "^" (regexp-quote presel))))))
Helm和ido一样,也是一个交互式补全的插件:https://emacs-helm.github.io/helm/
Helm只在emacs 24.4以上版本上才可以用。
打开另一个文件
标准emacs做法是find-alternate-file函数,绑定到C-x C-v键上。spacemacs上,这个键被绑定到ido-find-alternate-file函数上。
(defun ido-find-alternate-file ()
...
(interactive)
(ido-file-internal 'alt-file 'find-alternate-file nil "Find alternate file: "))
将另一个文件的内容插入到当前文件
标准emacs的做法是insert-file函数,绑定到C-x i键上。spacemacs默认绑定到ido-insert-file函数上。
(defun ido-insert-file ()
(interactive)
(ido-file-internal 'insert 'insert-file nil "Insert file: " nil nil 'ido-enter-insert-buffer))
以二进制的方式打开文件
emacs默认没有将其绑定到快捷键上,这个功能是hexl-find-file函数来实现的。打开后会进入hexl-mode.
spacemacs将其绑定到『空格 f h』上。
保存文件
保存文件不涉及交互操作,所以ido和helm都不管,还是用的emacs默认的save-buffer函数。
emacs默认将其绑定在C-x C-s键上,spacemacs又提供了”空格 f s”的快捷键
(defun save-buffer (&optional arg)
(interactive "p")
(let ((modp (buffer-modified-p))
(make-backup-files (or (and make-backup-files (not (eq arg 0)))
(memq arg '(16 64)))))
(and modp (memq arg '(16 64)) (setq buffer-backed-up nil))
(if (and modp
(buffer-file-name)
(not noninteractive)
(not save-silently))
(message "Saving file %s..." (buffer-file-name)))
(basic-save-buffer (called-interactively-p 'any))
(and modp (memq arg '(4 64)) (setq buffer-backed-up nil))))
另存为文件
另存为文件又涉及交互操作了,标准emacs使用write-file函数,而spacemacs使用ido-write-file函数。它们都是绑定到C-x C-w键上。
(defun ido-write-file ()
(interactive)
(let ((ido-process-ignore-lists t)
(ido-work-directory-match-only nil)
(ido-ignore-files (cons "[^/]\\'" ido-ignore-files))
(ido-report-no-match nil)
(ido-confirm-unique-completion t)
(ido-auto-merge-work-directories-length -1))
(ido-file-internal 'write 'write-file nil "Write file: " nil nil 'ignore)))
退出emacs
spacemacs对此没有扩展,都是使用save-buffers-kill-terminal函数,绑定到C-x C-c键上。
lisp
(defun save-buffers-kill-terminal (&optional arg)
(interactive "P")
(if (frame-parameter nil 'client)
(server-save-buffers-kill-terminal arg)
(save-buffers-kill-emacs arg)))
文件操作小结
本节涉及的插件:ido, helm
| 功能 | 函数 | 快捷键 | leader键 |
|---|---|---|---|
| 打开文件 | spacemacs/helm-find-files | C-x C-f | 空格 f f |
| find-file | 无 | 无 | |
| ido-find-file | 无 | 无 | |
| helm-find-files | 无 | 空格 f F | |
| 打开另一个文件 | ido-find-alternate-file | C-x C-v | 无 |
| find-alternate-file | 无 | 无 | |
| 将另一个文件的内容插入到当前文件 | ido-insert-file | C-x i | 无 |
| insert-file | 无 | 无 | |
| 保存文件 | save-buffer | C-x C-s | 空格 f s |
| 另存为文件 | ido-write-file | C-x C-w | 无 |
| 以二进制的方式打开文件 | hexl-find-file | 无 | 空格 f h |
| 退出emacs | save-buffers-kill-terminal | C-x C-c | 无 |
我也说说Emacs吧(3) - 文件基本操作的更多相关文章
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...
- Linux 目录结构及文件基本操作
Linux 目录结构及文件基本操作 实验介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux ...
- java之文件基本操作
java之文件基本操作 1 使用 BufferedReader 在控制台读取字符 public static void readChar() throws IOException{ char c; I ...
- Linux - 文件基本操作管理
文件基本操作管理 复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...
- Linux 01 Liunx目录结构及文件基本操作
Linux目录结构及文件基本操作 1.Linux的文件组织目录结构(遵循FHS标准) FHS(Filesystem Hierarchy Standard)标准:多数Linux版本采用这种文件组织形式, ...
- emacs 只读打开文件
emacs 只读打开文件 : C-x C-r emacs 让buffer区变成只读 : C-x C-q emacs 让只读buffer区变成可以保存修改 : C-x C-q
- 文件基本操作 (C语言)
一切皆文件 ---Linux 头文件 <stdio.h> 中定义了文件的相关操作 #include <stdio.h> 文件操作基本流程: 打开:fopen 相关操作 关闭:f ...
- NO.4day LINUX centos 文件基本操作
LINUX centos 文件基本操作 1 LINUX简介 Linux的定义:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CP ...
- 实验楼学习linux第一章第四节linux目录结构及文件基本操作
linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...
随机推荐
- Tensorflow平台快速搭建:Windows 7+TensorFlow 0.12.0
Tensorflow平台快速搭建:Windows 7+TensorFlow 0.12.0 1.TensorFlow 0.12.0下载 2016年11月29日,距离TensorFlow 宣布开源刚刚过去 ...
- .NET Framework 系统要求
.NET Framework 3.5对操作系统的要求 .NET Framework 4 对操作系统的要求 .NET Framework 4.5对操作系统的要求
- 2017 ACM-ICPC 南宁区比赛 Minimum Distance in a Star Graph
2017-09-25 19:58:04 writer:pprp 题意看上去很难很难,但是耐心看看还是能看懂的,给你n位数字 你可以交换第一位和之后的某一位,问你采用最少的步数可以交换成目标 有五组数据 ...
- C# ContentType: "application/json" 请求方式传json参数问题
处理Http请求时遇到的ContentType为application/json方式,记录下这种Post请求方式下如何传json参数: var request = (HttpWebRequest)We ...
- phpcms v9 栏目伪静态完全自定义为栏目英文目录名
1,后台增加url规则,增加后.导航上,或分页号上,会自动替换为静态的样式.类似www.abc.com/news/2/ 2表示页码 phpcms v9 的后台扩展,url规则,添加两个规则, 一个是名 ...
- Python 使用sys模块
你已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个包含了所有你定义的函数和变量的文 ...
- spring mvc: 多动作控制器(Controller下面实现多个访问的方法)MultiActionController / BeanNameUrlHandlerMapping
spring mvc: 多动作控制器(Controller下面实现多个访问的方法) 比如我的控制器是UserController.java,下面有home, add, remove等多个方法 访问地址 ...
- 面向目标的场景设置--Goal-Oriented Scenario
在场景设置的时候会有两种场景设置方式: 1,手动模式(Manual Scenario) 2.面向目标的场景设置模式(Goal Oriented scenario) 其中手动模式使用较多,而且灵活应用, ...
- Java栈的两种实现
1. 基于数组 package Algorithm.learn; import java.util.Arrays; /** * Created by liujinhong on 2017/3/7. * ...
- 闲话__stdcall, __cdecl, __fastcall出现的历史背景以及各自解决的问题
可以认为最先由微软搞出来了__stdcall, 其实就是和WINAPI的声明是一样的,入栈顺序是从右到左,函数返回时,会进行出栈操作. PASCAL语言是非常古老的编程语言,在C语言之前,因此在当时的 ...