第 2 章 Editor

简介:
  • vi

    vi file

  • emacs

    emacs

  • nano/pico

    nano file / pico file

  • joe

    joe file

    sudo apt-get install joe

2.1. VIM

Vi IMproved - enhanced vi editor (transitional package)

	
sudo apt-get install vim-perl vim-python vim-latexsuite
	
	

2.1.1. New text file line delimiter

		
:set ff
:set ff=dos
:set ff=unix
:set ff=mac
		
		

2.1.2. vim中的出现^M

			
sudo apt-get install tofrodos
dos2unix
			
		

输入

:set notextmode		
		

2.1.3. tab 符

		
set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker
		
		

2.1.4. 粘贴是禁用格式化功能

:set paste

2.1.5. Regular Expressions

2.1.5.1. search & replace
%s/neo/leo/g
%s#/logs#/www#g
			
2.1.5.2. 会去掉vim文件中的空白行
				
:%s/^\s*\n/
				
			

2.1.6. 大小写转换

将光标移动到想要大小写转换的地方然后键入

guw (大写转换成小写)

gUw (小写转换成大写)

g~w (是改变光标到词尾)

guu gUU g~~ (是改变一行)

2.1.7. split

		
:split <filename> 	按拆分模式打开文件,默认为上下拆分
:vsplit <filename>	左右拆分
		
		

Ctrl-w w

切换活动窗口

Ctrl-w Ctrl-w

同上

Ctrl-w h/j/k/l

切换活动窗口为 左/上/下/右 边的窗口

:q

关闭光标所在的分屏

2.1.8. vimrc

		
neo@netkiller:~$ cat /home/neo/.vimrc
set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker
set paste
set ruler
set number
set nocp " don't open Vim in Vi-compatible mode
set bs=2 " setup backspace to delete previous char in insert mode
set encoding=utf-8 fileencodings= " set UTF-8 for all files
set autoindent
set smartindent
set t_Co=256
syntax on
set syntax=tt2html
set hlsearch
colorscheme elflord
		
		

2.1.9. vimdiff - edit two or three versions of a file with Vim and show differences

# vimdiff  FILE_LEFT  FILE_RIGHT
# vim -d  FILE_LEFT  FILE_RIGHT
		
# vim FILE_LEFT
:vertical diffsplit FILE_RIGHT
		
2.1.9.1. 光标移动

左右窗口联动控制

:set scrollbind
:set noscrollbind
			

在各个差异点之间快速移动。

]c	跳转到下一个差异点
[c	跳转到上一个差异点
			

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

2.1.9.2. 文件合并
			
文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令
dp (diff "put")

如果希望把另一个文件的内容复制到当前行中,可以使用命令
do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:
Ctrl-w, w

在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:
:diffupdate

如果希望撤销修改,可以和平常用vim编辑一样,直接
<ESC>, u

但是要注意一定要将光标移动到需要撤销修改的文件窗口中。
			
			
2.1.9.3. 上下文
上下文的展开和查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置:
:set diffopt=context:3

可以用简单的折叠命令来临时展开被折叠的相同的文本行:
zo (folding open,之所以用z这个字母,是因为它看上去比较像折叠着的纸)

然后可以用下列命令来重新折叠:
zc (folding close)
			
2.1.9.4. 保存于退出
同时操作两个文件
在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:
:qa (quit all)

如果希望保存全部文件:
:wa (write all)

或者是两者的合并命令,保存全部文件,然后退出:
:wqa (write, then quit all)

如果在退出的时候不希望保存任何操作的结果:
:qa! (force to quit all)
			

2.1.10. vim backup script

			
#!/bin/bash
########################################
# vim script for automatic backup by neo
########################################

datetime=`date +"%Y-%m-%d.%H:%M:%S"`
current_date=`date +"%Y-%m-%d"`
current_time=`date +"%H:%M:%S"`
filename=`basename $1`
original=$1

if [ -f ${original}.original ]
then
    echo "[${datetime}] [B] ${original} to ${original}.original" >> ~/backup/history.log
else
    cp ${original} ${original}.original
fi

if [ -d ~/backup/${current_date} ]
then
    echo "[${datetime}] [O] ${original}" >> ~/backup/history.log
else
    mkdir -p ~/backup/${current_date}
    echo [${datetime}] [C] mkdir ~/backup/${current_date} >> ~/backup/history.log
fi

backup=~/backup/${current_date}/${filename}.${current_time}
if [ -f ${original} ];
then
    cp ${original} ${backup}
    echo "[${datetime}] [B] ${original} to ${backup}" >> ~/backup/history.log
fi

vim ${original}



datetime=`date +"%Y-%m-%d.%H:%M:%S"`
current_date=`date +"%Y-%m-%d"`
current_time=`date +"%H:%M:%S"`
newfile=~/backup/${current_date}/${filename}.${current_time}

if [ -f ${original} ];
then
    if [ -f ${backup} ];
    then
        original_sha=`sha1sum ${backup} |awk -F ' ' '{print $1}'`
        newfile_sha=`sha1sum ${original} |awk -F ' ' '{print $1}'`

        if [ $original_sha = $newfile_sha ];
        then
            echo "[${datetime}] --- " >> ~/backup/history.log
            exit
        fi

    fi
    cp ${original} ${newfile}
    echo "[${datetime}] [M] ${original}" >> ~/backup/history.log
    echo "[${datetime}] [B] ${original} to ${newfile}" >> ~/backup/history.log

fi
echo "[${datetime}] --- " >> ~/backup/history.log
exit

			
		




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

目录
相关文章
|
6月前
|
文字识别 数据安全/隐私保护
PDF-XChange Editor v10.2.1.386
PDF-XChange Editor,号称打开速度最快最强大的PDF编辑器/PDF阅读器,PDF-XChange专注于PDF文档的编辑,打开PDF文件速度快,软件小功能强大,可以自定义制作PDF电子文档,具有创建,查看,编辑,注释,审阅,添加水印,签名保护,PDF格式转换,PDF文档打印,扫描仪识别,OCR识别页面等功能。
51 1
PDF-XChange Editor v10.2.1.386
|
编解码
UE中使用Editor Utility Widget创建编辑器工具
UE中使用Editor Utility Widget创建编辑器工具
415 0
UE中使用Editor Utility Widget创建编辑器工具
|
存储 图形学 索引
Unity 编辑器开发实战【Custom Editor】- AudioDatabase Editor 音频库编辑器
Unity 编辑器开发实战【Custom Editor】- AudioDatabase Editor 音频库编辑器
244 1
Unity 编辑器开发实战【Custom Editor】- AudioDatabase Editor 音频库编辑器
|
存储 图形学 索引
Unity 编辑器开发实战【Custom Editor】- FSM Editor
Unity 编辑器开发实战【Custom Editor】- FSM Editor
329 0
Unity 编辑器开发实战【Custom Editor】- FSM Editor
|
缓存 前端开发 JavaScript
实现一个 Code Pen:(二)在 Next.js 中使用 Monaco Editor
Monaco Editor 是 VS Code 中使用的开源代码编辑器, 拥有代码高亮和代码自动补全的功能,本文介绍 Monaco Editor 的加载方式和 React 组件封装
935 0
实现一个 Code Pen:(二)在 Next.js 中使用 Monaco Editor
PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder
PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder
684 0
PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder
|
设计模式 JavaScript 前端开发
VS Code 编辑器: Monaco Editor 介绍
VS Code 编辑器: Monaco Editor 介绍
VS Code 编辑器: Monaco Editor 介绍
|
开发工具