dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:3190回复:12

vim 命令

楼主#
更多 发布于:2013-04-27 17:53
vim

替换
cat -A /etc/nova/nova.conf | head
--dhcpbridge_flagfile=/etc/nova/nova.conf$
$
--dhcpbridge=/usr/bin/nova-dhcpbridge$
$
--logdir=/var/log/nova$
$
--state_path=/var/lib/nova$
$
--lock_path=/run/lock/nova$
$
$ 表示回车,要求将以回车为开始的行,替换成空,vim 错做如下:
:% s/^\n//g

分析
: 表示进入命令模式
% 表示全文搜索
s 表示替换
/^\n/ 表示被替换的(以回车为开始的行)
// 表示替换的目标(空)
g 表示匹配所有行
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2013-04-27 17:56
Vim 是一个高级文本编辑器,她提供了Unix下编辑器 'Vi' 的功能并对其进行了完善。Vim 经常被认为是
"程序员的编辑器",她在程序编写时非常有用,很多人认为她是一个完整的集成开发环境(IDE)。仅管如此,Vim并不只是程序员使用的。Vim可以用于
多种文档编辑,从email排版到配置文件编写。


模式
Vim最令人混淆的特征之一是她拥有3种模式.
插入模式
-- 输入文本
编辑模式
-- 执行命令,也称为正常模式。
命令模式
-- 执行 冒号 命令

插入模式并不是缺省的模式,您必须按下i来进入插入模式,在屏幕上输入一些文字。按下<Esc>按钮将从插入模式转到编辑模式。该模式用于移动和操纵文本,有时以非常有趣的方式进行。 命令模式用于执行冒号命令,比如保存,查找/替换以及配置vim等。欲保存文本,您只需要在正常模式下输入:进入命令模式并输入:w filename<Enter>.退出vim请执行冒号命令:q.总结如下:
vim (启动vim)
i (进入插入模式)
&lt;输入文本&gt;
&lt;Esc&gt; (回到编辑模式)
:w filename (保存文件为'filename')
:q (退出vim)
vim filename (打开您刚才在vim中保存的文件)

参考
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2013-05-15 11:06
vim匹配中文

:%s/[^\x00-\xff]/aaaa/g
 
 把ASCII 0-255之外的字符都替换成aaaa了.
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
地板#
发布于:2013-12-28 21:08
Vim中的swp文件

vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是data,那么swp文件名就是.data.swp。如果文件正常退出,则此文件自动删除。
以下两种情况不会删除swp文件:
  • Vim非正常退出,这种情况下,除非手动删除swp文件(也可以在vim提示时删除),否则它会一直存在。
  • 多个程序同时编辑一个文件
可以通过选项禁止产生swp文件
set noswapfile

转自:Vim中的swp文件
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
4楼#
发布于:2016-04-25 12:18
vim 详细介绍
Vim常用模式
   正常模式(normal-mode)
   插入模式(insert-mode)
   命令模式(command-mode)
   可视模式(visual-mode)

正常模式
正常模式主要用来浏览和修改文本内容的,一般的打开Vim都是正常模式。在任何模式下,只要按下 Esc 键就可以返回正常模式

插入模式(insert)
i    #光标前插入
I    #光标行首插入
a    #光标后插入
A    #光标行尾插入
o    #光标所在行下插入一行,行首插入
O    #光标所在行上插入一行,行首插入
G    #移至最后一行行首
nG   #移至第n行行首
n+   #下移n行,行首
n-   #上移n行,行首

命令模式(command-mode)
:s/str1/str2/    #将找到的第一个str1替换为str2  
:s/str2/str2/g   #将当前行找到的所有str1替换为str2
:n1,n2s/str1/str2/g  #将从n1行至n2行找到的所有的str1替换为str2
:1,.s/str1/str2/g   #将从第1行至当前行的所有str1替换为str2
:.,$s/str1/str2/g   #将从当前行至最后一行的所有str1替换为str2

命令模式示例
:set ff             #查看文件格式 fileformat=dos 或 fileformat=unix
:set ff=unix        #修改文件格式
:10,$ s/^[\t]*/ /   #行头所有tab符号,用空格替换;
:10,30 s/^[ ]*/ /   #行头有多个空格,用1个空格替换
:10,30 g/^ *$/d     #删除空行
:10,20 s/[#].*/ /   #号后边的任意位字符串,用1个空格替换
:6,9 s/^[ ]//         #行头空格删掉
:10,20 s/[ ]\{2,\}//  #重复两次以上的空格,删掉!
:1,$ s/\\n//          #\n 换行符删掉
:% s/^/#/g            #每行前添加#号,如果每行尾添加则^变成$即可,%表示全文!
:% s/\(\d\+\.\)\{3\}\d\+//g  #去掉 ip 地址(10.0.0.7)
:% s/^\s\{2,\}\d\+\.//g      #替换开头为空白或者tab ifs字符至少重复两次以上,接数字至少重复一次,接.号,全局替换  
:% s#\[url\]\|\[/url\]##g    #替换或者,注意 \| 表示或者

参考:Vim操作的四种模式
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
5楼#
发布于:2017-03-08 17:35
vim 合并行
:set fileformat  设置文件格式
:set endofline  设置文件结束符
:set noendofline  取消文件结束符
:set list  进入List Mode
:set nolist  退出List Mode
:%s/\n//g  删除换行符
:set textwidth  设置行宽
:set textwidth  设置行边距
:join  合并多行
J  合并两行
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
6楼#
发布于:2017-05-08 21:28
vim 交互式替换操作
问题
vim 进行替换操作时,如何逐一进行替换前先确认?
示例: 用 ABC 替换 abc

方法
命令模式: %s/abc/ABC/gc
在每次替换前询问,y 键就是替换,n键就是跳过,Esc键 是不再继续替换,a键是剩下的全替换。
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
7楼#
发布于:2017-06-02 10:54
ctrl+s 终止屏幕输出(即停止回显),你敲的依然有效,只是看不见;
ctrl+q 恢复屏幕输出,你刚才敲的都显示出来了;
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
8楼#
发布于:2017-08-03 14:25
用 vim 更方便的编程(python)
环境
vim --version | head -n1
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 28 2017 11:49:08)
系统: ubuntu 14.04 amd64

配置文件
cat ~/.vimrc
" 语法高亮
syntax on

" 缩进
set sw=4
set ts=4
" 依文件类型设置自动缩进
filetype indent plugin on
autocmd FileType python setlocal et sta sw=4 sts=4

" 显示行号
set nu
"为方便复制,用<F2>开启/关闭行号显示:
nnoremap <F2> :set nonumber!<CR>:set foldcolumn=0<CR>

" 深色背景调整配色
set background=dark

" Modeline(允许被编辑的文件以注释的形式设置Vim选项)
set modeline

" 状态栏显示正在输入的命令
set showcmd

" 代码补全
"让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
set completeopt+=longest
 
"离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
 
"回车即选中当前项
inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>"
 
"上下左右键的行为
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

" 编码
set encoding=utf-8

" 查找
"忽略大小写,但在有一个或以上大写字母时仍大小写敏感
set ignorecase
set smartcase
"实时搜索
set incsearch
"搜索时高亮显示被找到的文本
set hlsearch

其它
1. 代码补全
Vim 7已经内置了代码补全功能[6],补全操作可分为两种:

A. 关键字补全
    即简单地补全到文档中已有的词,快捷键为 Ctrl-N 或 Ctrl-P。

参考自: 用Vim编程——配置与技巧

待补充...
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
9楼#
发布于:2017-10-17 11:33
vim 多个窗口
1. 用 vim 打开一个文件,例如:
vim compose-A.yml

2. 在普通模式下,
输入:":sp"(不含引号)横向切分一个窗口,这两个窗口打开的是同一个文件;
或者输入 ":vsp" 纵向切分一个窗口;

3. 切换窗口,
普通模式下ctrl+w, 再按一下w,可以在两个窗口之间切换;

4. 新窗口中打开文件
切换窗口后,在普通模式下,输入:":e ../source/compose-B.yml",打开另一个文件;
输入文件名时,可以使用 tab键补齐 文件名称;

5. 关闭窗口
 在命令模式下,输入 ":q" (不含引号),退出当前的窗口;

示例,在多个文件中复制数据
1. 按照上述 1-4 步骤操作,
2. 在 compose-A.yml 复制N行数据
3. 切换窗口,在 compose-B.yml 粘贴数据
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
10楼#
发布于:2017-11-02 13:59
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
11楼#
发布于:2017-11-14 15:51
vim 带格式粘贴
问题描述
在 vim 中复制文本信息,可能发现格式发生了改变。

解决方法
vim 命令模式下收入:set paste

也可以关闭它
:set nopaste

帮助,还可以:
:h paste

                                                'paste' 'nopaste'
'paste'                 boolean (default off)
                        global
                        {not in Vi}
        Put Vim in Paste mode.  This is useful if you want to cut or copy
        some text from one window and paste it in Vim.  This will avoid
        unexpected effects.

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
12楼#
发布于:2018-07-25 11:13
vim 删除空行
命令模式

:g/^$/d
参数
g ,global,标识全文本执行
/.../ , 正则匹配
^$ , 空白行
d ,delete
#
游客

返回顶部