debian中vim常见操作
2010-10-19 13:11:52 阿炯

Debian中vi命令指向的是旧版的vi而不是vim,且vim默认是不开启语法高亮显示的。修改其配置文件:/etc/vim/vimrc,将"syntax on"这项打开即可。

” Vim5 and later versions support syntax highlighting. Uncommenting the next
” line enables syntax highlighting by default.
“syntax on

找到第20行,将syntax on前面的”去掉。
#vim crc32
Error detected while processing /usr/share/vim/vimrc:
line 20:
E319: Sorry,the command is not available in this version : syntax on

原来是vim主扩展没有装,现手动将其安装好。
#apt-get install vim

debian在默认情况是使用的vim-tiny这个包,其仅带有vim基本的功能。下面是默认安装系统时所带的vim软件包情况:
pdb:~/soft# dpkg -l|grep vim
ii  vim-common                        1:7.1.314-3+lenny2         Vi IMproved - Common files
ii  vim-tiny                          1:7.1.314-3+lenny2         Vi IMproved - enhanced vi editor - compact version
pdb:~/soft# whereis vim
vim: /usr/bin/vim /usr/bin/vim.tiny /etc/vim /usr/share/vim /usr/share/man/man1/vim.1.gz
pdb:~/soft# ls -lh /usr/bin/vim
lrwxrwxrwx 1 root root 21 08-26 08:22 /usr/bin/vim -> /etc/alternatives/vim

在安装了vim包后系统中相关的软件包为:
sdb:/etc/samba# dpkg -l|grep vim
ii  vim                                  1:7.1.314-3+lenny2       Vi IMproved - enhanced vi editor
ii  vim-common                           1:7.1.314-3+lenny2       Vi IMproved - Common files
ii  vim-runtime                          1:7.1.314-3+lenny2       Vi IMproved - Runtime files
ii  vim-tiny                             1:7.1.314-3+lenny2       Vi IMproved - enhanced vi editor - compact version

当再使用vim编辑程序文件时,就可以以彩色高亮的方式显示了。如果你在gui下想更方便和全面的使用vim的话,你应该考虑使用vim-full软件包了。

其它一些配置:
"set compatible
"设置tab字符个数
set tabstop=4
set shiftwidth=4
"自动缩进
set autoindent
"更方便的退格键
set backspace=2
"自动检测文件类型
filetype on
"映射F8为显示列表,需要taglist插件
nnoremap :Tlist
"配色文件
colorscheme ron

"缓冲区写入文件的时候自动检查文件类型
"au BufWritePost * filet detect
"设定文件编码类型,彻底解决中文编码问题
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
set number "显示行号
colo torte "设置配色方案为torte
set hlsearch "设置搜索结果高亮显示

"设置折叠
set foldcolumn=2
set foldmethod=indent
set foldlevel=3
" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
syntax on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
"set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
"if has("autocmd")
" au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
" \| exe "normal g'\"" | endif
"endif
" Uncomment the following to have Vim load indentation rules according to the
" detected filetype. Per default Debian Vim only load filetype specific
" plugins.
"if has("autocmd")
" filetype indent on
"endif



"语法高亮
syntax enable
syntax on
"显示行号
set nu

"修改默认注释颜色
"hi Comment ctermfg=DarkCyan
"允许退格键删除
"set backspace=2
"启用鼠标
set mouse=a
set selection=exclusive
set selectmode=mouse,key
"按C语言格式缩进
set cindent
set autoindent
set smartindent
set shiftwidth=4

" 允许在有未保存的修改时切换缓冲区
"set hidden

" 设置无备份文件
set writebackup
set nobackup

"显示括号匹配
set showmatch
"括号匹配显示时间为1(单位是十分之一秒)
set matchtime=5
"显示当前的行号列号:
set ruler
"在状态栏显示正在输入的命令
set showcmd

set foldmethod=syntax
"默认情况下不折叠
set foldlevel=100
" 开启状态栏信息
set laststatus=2
" 命令行的高度,默认为1,这里设为2
set cmdheight=2


" 显示Tab符,使用一高亮竖线代替
set list
"set listchars=tab:\|\ ,
set listchars=tab:>-,trail:-


"侦测文件类型
filetype on
"载入文件类型插件
filetype plugin on
"为特定文件类型载入相关缩进文件
filetype indent on
" 启用自动补全
filetype plugin indent on


"设置编码自动识别, 中文引号显示
filetype on "打开文件类型检测
"set fileencodings=euc-cn,ucs-bom,utf-8,cp936,gb2312,gb18030,gbk,big5,euc-jp,euc-kr,latin1
set fileencodings=utf-8,gb2312,gbk,gb18030
"这个用能很给劲,不管encoding是什么编码,都能将文本显示汉字
"set termencoding=gb2312
set termencoding=utf-8
"新建文件使用的编码
set fileencoding=utf-8
"set fileencoding=gb2312
"用于显示的编码,仅仅是显示
set encoding=utf-8
"set encoding=euc-cn
"set encoding=gbk
"set ambiwidth=double
set fileformat=unix


"设置高亮搜索
set hlsearch
"在搜索时,输入的词句的逐字符高亮
set incsearch

" 着色模式
set t_Co=256
"colorscheme wombat256mod
"colorscheme gardener
"colorscheme elflord
colorscheme desert
"colorscheme evening
"colorscheme darkblue
"colorscheme torte
"colorscheme default

" 字体 && 字号
set guifont=Monaco:h10
"set guifont=Consolas:h10

" :LoadTemplate       根据文件后缀自动加载模板
"let g:template_path='/home/ruchee/.vim/template/'

" :AuthorInfoDetect   自动添加作者、时间等信息,本质是NERD_commenter && authorinfo的结合
""let g:vimrc_author='knight02'
""let g:vimrc_email='tsjkht@foxmail.com'
""let g:vimrc_homepage='https://www.cnblogs.com/Knight02/'
"
"
" Ctrl + E            一步加载语法模板和作者、时间信息
""map <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
""imap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
""vmap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi


" ======= 引号 && 括号自动匹配 ======= "
"
":inoremap ( ()<ESC>i

":inoremap ) <c-r>=ClosePair(')')<CR>
"
":inoremap { {}<ESC>i
"
":inoremap } <c-r>=ClosePair('}')<CR>
"
":inoremap [ []<ESC>i
"
":inoremap ] <c-r>=ClosePair(']')<CR>
"
":inoremap < <><ESC>i
"
":inoremap > <c-r>=ClosePair('>')<CR>
"
"":inoremap " ""<ESC>i
"
":inoremap ' ''<ESC>i
"
":inoremap ` ``<ESC>i
"
":inoremap * **<ESC>i

" 每行超过80个的字符用下划线标示
""au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.java,*.cs,*.lisp,*.el,*.erl,*.tex,*.sh,*.lua,*.pl,*.php,*.tpl,*.py,*.rb,*.erb,*.vim,*.js,*.jade,*.coffee,*.css,*.xml,*.html,*.shtml,*.xhtml Underlined /.\%81v/
"
"
" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")

" Don't use Ex mode, use Q for formatting
map Q gq

" This is an alternative that also works in block mode, but the deleted
" text is lost and it only works for putting the current register.
"vnoremap p "_dp

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch
endif

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

  " Put these in an autocmd group, so that we can delete them easily.
  augroup vimrcEx
  au!

  " For all text files set 'textwidth' to 80 characters.
  autocmd FileType text setlocal textwidth=80

  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  autocmd BufReadPost *
    \ if line("'\"") > 0 && line("'\"") <= line("$") |
    \   exe "normal g`\"" |
    \ endif

  augroup END

else

  set autoindent  " always set autoindenting on

endif " has("autocmd")

" 增加鼠标行高亮
set cursorline
hi CursorLine  cterm=NONE   ctermbg=darkred ctermfg=white

" 设置tab是四个空格
set ts=4
set expandtab

" 主要给Tlist使用
let Tlist_Exit_OnlyWindow = 1
let Tlist_Auto_Open = 1



下面是一些在日常工作总结出来的经验,在普通模式下需要记住的指令:
i→ 插入模式. 按ESC键返回普通模式
x→ 删除光标所在的字符
:wq→ 保存退出(:w 保存,:q 退出)
dd→ 删除(拷贝)当前行
p→ 粘贴

推荐:
hjkl(高度推荐) → 基本的光标移动 (←↓↑→), hj按行移动。
:help <command>→ 显示关于<command>的帮助,可以使用help不带<command>获得常规帮助。

只有5个命令,一开始只需掌握这些,当适应了这些命令后(大概需要一天或更多的诗句),你可以转到第二层级了。但稍回顾一下普通模式。在标准编辑器里,要复制的话需要使用ctrl键(Ctrl-c)。实际上当按下ctrl键时所有的按键的意义都改变了。在vim普通模式下就像在ctrl键自动按下的情况下使用编辑器。

vim一共有几种模式?
12种,常用有3种模式。

在命令行模式下,实现替换7,8行的字符b,用字符a替换字符b:
输入:7,8s/b/a/g
其中:b就是旧的之前的字符,a是新的现在的字符

所有行都替换:
输入:%s/b/a/g

最后的补充:
命令后附带回车,比如我若是写:q,我是指:q<enter>
---------------
插入模式变种命令:

a:进入插入模式,后续输入在当前光标后面
A:进入插入模式,后续输入在当前段落段尾
i:进入插入模式,后续输入在当前光标前面
I:进入插入模式,后续输入在当前段落段首
o:进入插入模式并在当前行的后面创建新的空白行
O:进入插入模式并在当前行的前面创建新的空白行
p:粘贴至当前行之后
P:粘贴到当前行之前
cw:替换从光标到单词结束

基本移动命令
0→ 跳到第一列
^→ 跳到本行第一个非空字符
$→ 跳到本行末尾
g_→ 跳到本行最后一个非空字符
/pattern→ 搜索pattern

复制/粘贴
P→ 在当前位置之前粘贴,记住 p 是在当前位置之前粘贴.
yy→ 复制当前行,与dd和P命令相比更简单。
取消/恢复
u→ 取消
<C-r>→ 恢复
加载/保存/退出/修改 文件(缓存)
:e <文件路径>→ 打开
:w→ 保存
:saveas <文件路径>→ 保存到这个文件
:x,ZZ或者:wq→ 保存和退出 (:x 如果可能的话,只保存)
:q!→ 退出但不保存,使用:qa!,即使在缓存中还有已经修改的也会退出。
:bn(对比:bp) → 显示下一个(上一个)文件缓存

---------------
vim是怎么帮你做重复事情的。
1. .→(点)可以重复最后一个命令,
2. N<命令>会重复命令N次。

NG→ 跳到第N行
gg→ 是1G的快捷方式 - 跳到文件的开始
G→ 跳到最后一行

单词间移动:
w→ 跳到下一个单词的开头,
e→ 跳到这个单词的末尾.
默认,单词是有字母和下划线组成。这里我们所谓的单词就是由空格分隔的。如果你只想考虑单词,就使用大写的字符吧:

W→跳到下一个单词的开头,
E→ 跳到这个单词的末尾.

---------------
大多数命令使用下面这种通用格式:
<开始位置><命令><结束位置>
例如: 0y$意味着
0→ 跳到本行开头
y→ 从这里开始复制
$→ 直到本行结束
我们也可以使用ye,从当前位置复制到单词的末尾。但是y2/foo 会一直复制到第二个foo出现的地方。
但对于y(复制), d(删除), v(visual 选择), gU(大写), gu(小写)等等命令都是真实的。

在当前行移动:0^$g_fFtT,;

0→ 跳到第一列
^→ 跳到当前行的第一个字符
$→ 跳到最后一列
g_→ 跳到这行的最后一个字符
fa→ 跳到这行a字母的下一个出现的地方。(对比 ; )会查找下一个(上一个)地方
t,→ 跳到,字符的前一个字符.
3fa→ 在这行中查找a出现的第三个位置.
F 和 T→ 与f和t相似, 但是方向相反.

一个有用的提示:dt"→删除所有的直到”。

---------------
区域选择 : <命令>a<对象> 或 <命令>i<对象>
这些命令仅仅能用在可视化模式的一个操作后。但是他们相当的有用。他们的主要模式有:
<命令>a<对象> 和 <命令>i<对象>
命令可以是任何命令,例如 , d(删除),y(拉取),v(进入可视化模式)。对象可以是: w一个单词,W一个单词 (扩展的),s一个句子,p一个段落。而且也可以是普通的字符, 例如",',),},]。
假设现在光标在 (map (+) ("foo")) 这个字符串的第一个o上。
vi"→ 将会选择 foo
va"→ 将会选择 "foo"
vi)→ 将会选择 "foo"
va)→ 将会选择 ("foo")
v2i)→ 将会选择 map (+) ("foo")
v2a)→ 将会选择 (map (+) ("foo"))

---------------
矩形选择块:<C-v>
矩形选择块能够方便的对多行代码进行注释。 如:0<C-v><C-d>I-- [ESC]
^→ 将光标定位到这行第一个非空格字符
<C-v>→ 选择开始位置
<C-d>→ 向下移动 (也可使用 jjj 或者 % ,其它…)
I-- [ESC]→ 用 -- 来注释每一行

---------------
实现:<C-n>和<C-p>.
在插入模式中:只要打出单词的首字母,然后按<C-p>。

---------------
可视化模式选择: v, V, <C-v>
我们已经看到过<C-v>例子,这里还有v和V。一旦已经选择好了,你可以:
J→ 让所有行连接在一起
<(对比>) → 向左(右)对齐.
=→ 自动对齐

在可视化模式所选择的行的末尾添加一些东西:
<C-v>
跳到目的行 (jjj 或者 <C-d> 或者 /patternor%等等…)
$跳到行末尾
A, 写入一些文本,[按] ESC 键.

在命令模式下,按ctrl+V,则进入可视化

1.多行选中:
首先光标先放在需要选中内容的第一行

开始进入可视化:
在命令模式下,按ctrl+V,则进入可视化

开始通过 H J K L 键来选中需要选中的内容:
在命令模式下,其实准确的来说是在可视化模式下

H  left:让光标左移动
J  down:让光标下移动
K  up:让光标上移动
L  right:让光标右移动

2.多行注释:
按照上面的步骤选中需要注释的内容后,当前的模式还是可视化模式

按照上面的步骤选中需要注释的内容后,按大写i(I),进入编辑模式也就是插入模式

这个时候,光标在需要注释内容的第一行,输入#,再按 Esc 键退出编辑模式进而实现了多行注释

3.取消多行注释:
在vim正常模式下,取消多行代码的注释需要以下步骤
按下ctrl+V,选择多行注释符#
按 d键,即可取消

---------------
分割:split 和 vsplit
这些是很重要的命令,所以你应该在:help split看看。
:split→ 创建一个水平分割窗口t (:vsplit 创建一个竖直分割窗口)
<C-w><dir>:  dir是hjklor←↓↑→中任何一个。用来切换分割窗口。
<C-w>_(对比<C-w>|) : 用来最大化水平(竖直)分割窗口的大小
<C-w>+(对比<C-w>-) : 增加 (减小) 分割窗口

vim使用参考


虽然在Linux下的文本编辑器众多,这些工具都有各自的优点,但是有几点是其它编辑工具所不能比拟的:
所有的类Unix系统都内建vi,其它的编辑工具则不一定,而vim相当于是vi的升级版
很多软件的编辑界面都会调用vi,如后面提到的crontab、edquota工具指令等
vim具有程序编辑能力,可以主动以字体颜色标识语法的正确性,方便代码编写
程序简单,编辑速度非常快

三种模式

由于vi/vim是一个全屏幕的文本编辑器,它工作在三种模式下:分别是命令模式、输入模式和末行模式。可以分别从命令模式切换到输入模式和末行模式,也可以从末行模式或输入模式切换到命令模式,但是输入模式与末行模式之间不能互相切换。


命令模式:
用户启动 vi/vim时,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如此时按下i,并不会输入一个字符,i被当作了一个命令。以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠命令模式输入更多命令。

输入模式:
在命令模式下按下i就进入了输入模式。在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式

命令模式:
在命令模式下按下:(英文冒号)就进入了命令模式。该模式可以输入单个或多个字符的命令,可用的命令非常多。基本的命令有:
1.:w 保存文件但不退出vi
2.:w file 将修改另外保存到file中,不退出vi
3.:w! 强制保存,不退出vi
4.:wq 保存退出
5.:wq! 强制保存文件,并退出vi
6.:q 不保存文件,退出vi
7.:q!不保存文件,强制退出vi
8.:e! 放弃所有修改,从上次保存文件开始再编辑
9.:wq 保存文件并退出vi

按ESC键可随时退出命令模式。

常用命令

基础打开文件,修改文件,保存退出,另存为文件。

vi /freeoa/file.txt 依路径打开文件
a 修改
Esc 冒号 w 保存 或者 ZZ 保存退出。
:wq!强行保存退出,只有文件所有者,或者是root用户。
:w (保存)
:w /freeoa/service.bak (另存为) 三种模式下切换 命令模式 :
插入模式 a 或者 i 或者 o
编辑模式ESC

搜索关键字 Esc /关键字 回车
n下一个
shift+n 上一个

插入命令 a(在光标后附加文本)
A(在本行行末附加文本)
i(在光标前插入文本)
I(在本行开始插入文本)
o(在光标下插入新行)
O (在光标上插入新行)

定位命令 向左:
h或方向左键(左移一个字符)
10h 向左移动10个字符,到行首会停止

向下:
j或方向下(下移一行)
5j 向下移动5行,或者5下箭头

向上:
k/方向上(向上一行)
7k #向上移动7行

向右:
l/方向右键(右边移一个字符)
6l #向右移动6个字符,到行末会停止不会换行

$(移至行尾)
0(零)(移至行首)
H(移至屏幕上端)
M(移至屏幕中央)
L(移至屏幕中下端)
W或w(定位到当前句子的开始位置)
E或e(定位到当前这句话的最后位置)

:set nu (设置行号)
:set nonu(取消行号)
gg(到第一行)
G(到最后一行)
nG或4gg(到第n行)到第四行
:n(到第n行)

Ctrl+b (在文件中向上移动一页(相当于 PageUp 键))
Ctrl+f (在文件中向下移动一页(相当于 PageDown 键))

撤销命令

这个命令很常用,要记住:
u (撤销上一步的操作)
Ctrl+r (恢复上一步被撤销的操作)

实例:在修改nginx的配置之后保存不退出:w保存,再 ctrl+z将文档放在后台,用nignx -t 验证语法或者重启nginx服务;如果有问题则快速回到文档编辑页面fg,再按u还原。退出保存即全部恢复。

实例:
vi /etc/nginx/nginx.conf
i编辑
再 :w 保存
ctrl+z
[1]+ Stopped vi /etc/nginx/nginx.conf
# jobs
[1]+ Stopped vi /etc/nginx/nginx.conf
# nginx -t 测试nginx文档是否有错误。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# fg 将后台程序进入前台

删除命令 x(删除光标所在字符)
nx(删除光标所在处后n个字符)
dd(删除光标所在行,ndd删除n行)
dG(删除光标所在行到末尾的内容)
D(删除从光标所在处到行尾)
:n1,n2d(删除指定的行)
:10,20d (删除第十行到第20行的内容)
光标移到第一行,然后dG(删除所有内容)

小贴士:一般在操作在本地编辑好的文档,全部复制,然后将服务器文档 dG全部删除,在粘贴新的文档。

复制剪切命令 yy、Y(复制当前行)
nyy、nY(复制当前行一下n行)
dd(剪切当前行)
ndd(剪切当前行一下n行)
p、P(粘贴在当前光标所在行下或行上)

替换和取消命令 r (取代光标所在处字符)
R(从光标所在处开始替换字符,按Esc结束)
u(取消上一步操作)
Ctrl+r (恢复上一步被撤销的操作)

搜索和替换命令 /string (向前搜索指定字符,搜索时请忽略大小写:set ic)
n(搜索指定字符串的下一个出现位置)
:%s/old/new/g(全文替换指定字符)
:%s/^#//g(去掉以#注释)
:%s/^/#/g(在全文开头添加#)
:n1,n2s/old/new/g (在指定范围内替换指定字符串)
:n1,n2s/^/#/g
:s/str1/str2/ (用字符串 str2 替换本行中首次出现的字符串 str1)
g是全局参数,如果加上这个,你文中有多少就替换多少,如果不加,就只能一个一个的替换!
fa(或fb)(查询这行a字母的的地方(或b字母))
3fa(在这行中查找a出现的第三个位置)

应用实例
导入其他文件内容
:r 文件名

在vi执行命令
:! 命令
定义快捷键:
:map 快捷键 触发命令
实例:
:map ^P I# (键盘按键实现^P:ctrl+v ctrl+p或者 ctrl+v+p )

:map ^B 0x
连续注释:
:n1,n2s/^/#/g
:n1,n2s/^/#//g
:n1,n2s/^/\/\//g
替换:
:ab sammail samlee@163.com

显示行号 :set nu 显示行号(注意前面输入冒号进入底行命令模式)
:set nonu 不显示行号

环境变量与记录

.viminfo:记录用户的行为,之前编辑过的文件光标在什么位置,在这个文件中进行过什么操作等,自动建立

.vimrc:定义vim的默认设置,如是否显示行号等,需要手动生成

命令说明
:set nu /
:set nonu 就是设定与取消行号
:set hlsearch /
:set nohlsearch 搜索时是否高亮显示。默认值是 hlsearch
:set autoindent
:set noautoindent 是否自动缩排?autoindent 就是自动缩排
:set backup/
:set nobackup 是否自动备份,一般是 nobackup 的,如果设定backup的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案
:set ruler/:set noruler 是否显示右下角的一些状态栏说明
:set showmode/:set noshowmode 是否显示左下角的状态栏
:set backspace=(012) 一般来说,如果我们按下 i 进入编辑模式后,可以利用backspace来删除任意字符的。但某些版本则不许如此。这时就可以使用这个设置2 可以删除任意;0 或 1 仅可删除刚刚输入内容
:set all 显示目前所有的环境变量设定值
:set 显示与系统默认值不同的设置,用户修改过的
:syntax on :syntax off 是否显示颜色
:set bg=dark
:set bg=light 可用以显示不同的颜色色调,预设是'light'。如果常常发现批注的字体深蓝色实在很不容易看,那么这里可以设定为dark;试看看,会有不同的样式呢

密码设置与取消

加密

vim filename
:X
Warning: Using a weak encryption method; see :help 'cm'
Enter encryption key:
输入密码
Enter encryption key: ******
Enter same key again: ******
保存(否则不加密)

# cat filename
VimCrypt~01!i
# vim filename (不能用vi)
Need encryption key for "filename"
Warning: Using a weak encryption method; see :help 'cm'
Enter encryption key:

取消密码

vim filename--->输入正确密码--->:X--->空密码--->保存
vim filename--->:set key= --->保存

注意:不要对系统文件进行加密的操作

其他命令
J(大写):将光标所在行下一行合并到该行,中间有空格间隔,光标移动到该空格处,要想达到在写字板中”[end]+[del]“的效果(即光标移动到行末,然后del使下一行提到该行),可以用Jx组合命令。

u(小写):撤销上一次所做的操作。多次使用 u 命令会一步一步依次撤销之前做过的操作(在一次切换到文本输入模式中输入的所有文本算一次操作)。

U(大写):一次性撤销自上次移动到当前行以来做过的所有操作,再使用一次 U 命令则撤销之前的 U 命令所做的操作,恢复被撤销的内容。所以U命令是不能一直撤销的,相当于只能撤销一步,再使用就是恢复了。

[ctrl]+r:按住ctrl键和r,类似快捷键的用法,是恢复操作,与命令u(小写)对应,可以在多次使用u命令撤销多步后,用该命令多次恢复至最新。

.(小数点):重复执行上一次的命令,注意和恢复不一样。例如重复粘贴,重复删除。

字符差异

由于linux和windows的系统差异,它们针对于文件的中的一些特殊符号表示方式也是不同的,比如说用来表示换行的符号等,如

$ cat -A freeoa.net-linux.txt
hello$
$ cat -A freeoa.net-windows.txt
hello^M$
^M$

如果这种文件是从windows拷贝到linux的一本小说的话,基本没什么问题,但是如果是一个我们需要执行指定工作的shell脚本就会出现问题,因为linux不认识这种符号的含义,就会导致shell脚本无法执行(踩坑了很多次,都是在win编辑txt文本,再后缀名sh,导致莫名的报错)。所以此时我们就要对这种文件进行处理

# unix2dos [-kn] file [newfile]
选项与参数:
-k:保留文件原本的 mtime 时间格式
-n:保留旧文件,将转换后的内容输出到新文件,如:dos2unix -n old new

另外一种方式就是直接在linux下编辑文件,再下载到win系统下使用IDE编辑器编辑开发,再回到linux全部粘贴。

小结

以上的常用命令和操作都是基于vim的基本原理形成的,vim的命令很强大,尤其底行命令模式甚至可以类似于一个小型的脚本语言。vim官网有一个经典的全键位图,如下:




该文章最后由 阿炯 于 2024-03-18 15:29:07 更新,目前是第 2 版。