我也说说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目录 ~ 获取 ...
随机推荐
- ES5给出的两个新增的语法糖getter和setter介绍
前言信息: EMCAScript5 简称ES5 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Ass ...
- BootStrap实现图片轮播
<div class="container"> <div data-ride="carousel" id="carou ...
- uboot下如何查看内存里的数据
答:使用md工具 md.b $address $count (从地址$address处显示$count个字节的数据,b=byte,8位) md.w $address $count (从地址$addre ...
- JAVA国际化输出日期格式
1.建议控制台程序 使用 IntelliJ IDEA 创建 MAVEN项目, 不选别的选项,则为控制台程序. (其它方式创建的控制台程序可能编译不过) 2.源码如下: import java.tim ...
- python sort dict 总结
python中的dict是不能排序的,只有对dict的representation进行排序,例如list或者tuple 排序肯定会用到sorted函数,那么我们就来讲一下sorted函数. sorte ...
- javascript脚本程序执行消耗的时间
console.time方法是开始计算时间,console.timeEnd是停止计时 // 启动计时器 console.time('time'); // (写一些测试用代码) // 停止计时,输出时间 ...
- CALL_AND_RETRY_LAST Allocation failed node打包报错
全局安装increase-memory-limit: npm install -g increase-memory-limit 进入工程目录,执行: increase-memory-limit
- HDU4910 Problem about GCD
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 【转】Scikit-learn技巧(拓展)总结
最近看了<Python数据挖掘入门与实战>,网上有说翻译地不好的,但是说实话,我觉得这本书还是相当不错的.作者Robert Layton是sklearn的开发者之一,书中介绍了很多skle ...
- Thread的中断机制(interrupt),循环线程停止的方法
一.中断原理 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个 ...