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) - 文件基本操作的更多相关文章

  1. (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作

    Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...

  2. Linux 目录结构及文件基本操作

    Linux 目录结构及文件基本操作 实验介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux ...

  3. java之文件基本操作

    java之文件基本操作 1 使用 BufferedReader 在控制台读取字符 public static void readChar() throws IOException{ char c; I ...

  4. Linux - 文件基本操作管理

    文件基本操作管理   复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...

  5. Linux 01 Liunx目录结构及文件基本操作

    Linux目录结构及文件基本操作 1.Linux的文件组织目录结构(遵循FHS标准) FHS(Filesystem Hierarchy Standard)标准:多数Linux版本采用这种文件组织形式, ...

  6. emacs 只读打开文件

    emacs 只读打开文件 : C-x C-r emacs 让buffer区变成只读 : C-x C-q emacs 让只读buffer区变成可以保存修改 : C-x C-q

  7. 文件基本操作 (C语言)

    一切皆文件 ---Linux 头文件 <stdio.h> 中定义了文件的相关操作 #include <stdio.h> 文件操作基本流程: 打开:fopen 相关操作 关闭:f ...

  8. NO.4day LINUX centos 文件基本操作

    LINUX centos 文件基本操作 1 LINUX简介 Linux的定义:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CP ...

  9. 实验楼学习linux第一章第四节linux目录结构及文件基本操作

    linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...

随机推荐

  1. [BZOJ4003]城池攻占

    Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, ...

  2. [CF730J]Bottles

    题目大意:每个瓶子有一定的容积,以及一定的水量,问最少几个瓶子装满所有水,在此基础上还要最小化移动水的体积 第一问用贪心直接求第二问转化成背包问题设dp[i][j]表示前i桶水总容积为j的最多水量,这 ...

  3. LeetCode——Unique Paths

    Question A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram be ...

  4. spring boot将jar包转换成war包发布

    spring boot将jar包转换成war包发布步骤 将<packaging>jar</packaging>修改为<packaging>war</packa ...

  5. 转载 URL短地址压缩算法

    文章转载http://www.nowamagic.net/webdesign/webdesign_ShortUrlInTwitter.php /// <summary> /// 生成sal ...

  6. [PyTorch]PyTorch中反卷积的用法

    文章来源:https://www.jianshu.com/p/01577e86e506 pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下: class torch.nn.Conv2d ...

  7. gdb 调试coredump文件过程:

    第一步:首先需要一个进程的coredump文件,怎么搞出coredump文件呢? 1. ps -fax|grep                 进程名称 找到进程的pid 2.gdb -p pid ...

  8. DLL注入之SHELLCODE数据转换

    #include "stdafx.h" #include <stdio.h> #include <string.h> #include <conio. ...

  9. 项目管理工具:Maven

    Maven是什么,作用是什么? Maven是项目管理工具,主要有两大作用:项目构建和依赖管理.项目构建就是项目编译.测试.集成发布实现自动化,依赖管理是很方便的功能,只要把当前项目所依赖的构件(jar ...

  10. python ssh登录

    3. 编写linkssh.py #!/usr/bin/env python# -*- coding: utf-8 -*-# filename: pexpect_test.py'''Created on ...