vim的使用

1、概述:

Vim 是从 vi 发展出来的一个文本编辑器。具有代码补全、编译及错误跳转等功能

2、vim编辑器的常用命令:

vim的使用

图源:https://vimsky.com/article/1894.html

2.1 vim键盘图:

vim的使用

2.2 vim的三种模式:

vim的使用

图源:https://www.runoob.com/linux/linux-vim.html

3、vim的环境设置参数:

(在一般命令模式下的常用操作):

:set nu

:set nonu 设置与取消行号显示 :set hlsearch

:set nohlsearch hlsearch就是 high light search(高亮度搜寻)。这个就是设置是否将搜寻的字串反白的设置值。默认值是 hlsearch :set autoindent

:set noautoindent 是否自动缩排?autoindent就是自动缩排 :set backup 是否自动储存备份文件?一般是 nobackup 的,如果设置 backup的话,那么当你更动任何一个文件时,则原始文件会被另存成一个文件名为filename~的文件。举例来说,我们编辑 hosts,设置 :set backup,那么当更动 hosts时,在同目录下,就会产生 hosts~文件名的文件,记录原始的 hosts文件内容 :set ruler 还记得我们提到的右下角的一些状态列说明吗?这个 ruler就是在显示或不显示该设置值的 :set showmode 是否要显示 –INSERT–之类的字眼在左下角的状态列。 :set backspace=(012) 一般来说,如果我们按下 i进入编辑模式后,可以利用倒退键 (backspace) 来删除任意字符的。但是,某些 distribution则不许如此。此时,我们就可以通过 backspace 来设置啰~ 当backspace为 2时,就是可以删除任意值;0或 1时,仅可删除刚刚输入的字符,而无法删除原本就已经存在的文字了! :set all 显示目前所有的环境参数设置值 :set 显示与系统默认值不同的设置参数,一般来说就

是你有自行变动过的设置参数啦! :syntax on

:syntax off 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本文件时,如果开头是以 #

开始,那么该列就会变成蓝色。如果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错

呢!但是,如果你仅是编写纯文本,要避免颜色对你的屏幕产生的干扰,则可以取消这个设置。 :set bg=dark

:set bg=light 可用以显示不同的颜色色调,默认是” light”。如果你常常发现注解的字体深蓝色实在很不容易看,那么这里可以设置为 dark

.vimrc的完整配置文件可参考github项目https://github.com/amix/vimrc

3.1 omnifunc设置:

注:与4.4一致

当使用vi 自动补全时 CTRL+x -> CTRL+o 报错:omnifunc is not set

原因:vim默认情况下不启用 Omni 补全。要打开全向补全,需要在你的.vimrc文件中加入如下语句:

filetype plugin on
set omnifunc=syntaxcomplete#Complete

注: ~/.vimrc文件中默认注释格式是”此为注释内容”。

4、vim中的额外功能

4.1 区块选择(visual block)

#实现整个区块的复制、选择、移动、操作
v          字符选择,会将光标经过的地方反白选择!
V          列选择,会将光标经过的列反白选择!
[Ctrl]+v   区块选择,可以用长方形的方式选择数据
y          将反白的地方复制起来
d          将反白的地方删除掉
p          将刚刚复制的区块,在光标所在处贴上!

4.2 多文件编辑

#同时编辑多个文件
#vim后接多个文件名
:n       编辑下一个文件
:N       编辑上一个文件
:files   列出目前这个 vim的打开的所有文件

4.3 多窗口功能

#在命令行界面输入“:sp {filename}”即可!那个filename可有可无。
#如果想要在新窗口启动另一个文件,就加入文件名,否则仅输入:sp时,出现的则是同一个文件在两个窗口间!
#用[ctrl]+w+↑”及“[ctrl]+w+↓”在两个窗口之间移动
:sp [filename]
#打开一个新窗口,如果有加 filename, 表示在新窗口打开一个新文件,否
#则表示两个窗口为同一个文件内容(同步显示)。
[ctrl]+w+j或[ctrl]+w+↓
#按键的按法是:先按下 [ctrl]不放,再按下 w后放开所有的按键,然后再
#按下 j(或向下方向键),则光标可移动到下方的窗口。
[ctrl]+w+k或[ctrl]+w+↑
#同上,不过光标移动到上面的窗口。
[ctrl]+w+q
#其实就是 :q结束离开啦!举例来说,如果我想要结束下方的窗口,
#那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开, 也可以按下
#[ctrl]+w+q啊!

4.4 vim的挑字补全功能

#程序语言的语法以及特定的语法关键字的补全
[ctrl]+x -> [ctrl]+n #通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+f #以当前目录内的“文件名”作为关键字,予以补齐
[ctrl]+x -> [ctrl]+o #以扩展名作为语法补充,以 vim内置的关键字,予以补齐

5、关于Linux中的换行问题:

参考: “\n,\r,\r\n”的区别

回车、换行的区别
在Windows中:

‘\r’ (回车):即将光标回到当前行的行首(而不会换到下一行),之后的输出会把之前的输出覆盖

‘\n’ 换行,换到当前位置的下一位置,而不会回到行首;

Unix系统里,每行结尾只有”

Windows系统里面,每行结尾是”

Mac系统里,每行结尾是”

也就是说:

Linux中遇到换行符(“\n”)会进行回车+换行的操作,回车符(”\r”)反而只会作为控制字符(“^M”)显示,不发生回车的操作。
而windows中要回车符+换行符(“\r\n”)才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
一个直接后果是:

Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。

因为断行字符以及 DOS与 Linux操作系统下面一些字符的定义不同,因此,不
建议在 Windows系统当中将文件编辑好之后,才上传到 Linux系统,会容易发生错误
问题。

5.1 断行符转换:

解决方法:使用DOS与UNIX字符转换命令 unix2dosdos2unix

类似的还有 mac2unix, unix2mac 适用于mac系统和unix系统编码转换;

默认情况下,字符转换命令通常不会安装,因此您需要在使用时自行安装:

[En]

Character conversion commands are generally not installed by default, so you need to install them yourself when you use them:

查看命令

yum -y install  [需要安装的命令*]
su #使用root权限
yum -y install unix2dos*
yum -y install dos2unix*
#DOS编码转为UNIX编码
dos2unix filename newfile
#UNIX编码转DOS编码
unix2dos filename newfile
#选项与参数
-k :保留该文件原本的 mtime时间格式(不更新文件上次内容经过修订的时间)
-n :保留原本的旧文件,将转换后的内容输出到新文件,如: dos2unix -n old new
#有些机器上没有安装dos2unix命令,也可以使用vim命令修改编码
vim filename
#vim打开文件后执行下列命令即可转为unix编码
:set fileformat=unix

6、vim中的编码问题:

需要注意如果你的文件是使用 ANSI码编码制作的,但在 vim的终端接口中你使用的是万国码 (utf8)

由于编码的不同,您的中文文档的内容当然是一堆乱码。

[En]

Because of the difference in coding, the content of your Chinese document is of course a pile of garbled codes.

1.你的 Linux系统默认支持的语系数据:这与 /etc/locale.conf有关;

2.你的终端接口 (bash)的语系:这与 LANG, LC_ALL这几个变量有关;

3.你的文件原本的编码;

4.打开终端机的软件,例如在 Terminal下面的窗口接口。事实上最重要的是第三与第四点,

只要这两个点的代码相同,您就可以正确地查看和编辑您的中文文档。否则,你会看到很多乱码!

[En]

As long as the codes of these two points are the same, you will be able to see and edit your Chinese documents correctly. Otherwise, you will see a lot of garbled codes!

编辑 ~/.vimrc文件,插入以下内容,更改编码相关信息。

set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030
set imcmdline
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

注: 关于vim中的编码问题:https://www.jianshu.com/p/44691357c8ee

6.1 编码语系转换: iconv 命令

选项与参数

-f  输入编码
-t  输出编码
-c  忽略不可转换的字符
--unicode-subst=FORMATSTRING    替代不可转换的 Unicode 字符
--byte-subst=FORMATSTRING   替代不可转换的字节
--widechar-subst=FORMATSTRING   替代不可转换的宽字符
-s  不显示有关转换出错的信息
-l  列出支持的编码
--version   显示版本信息并退出
#使用: iconv -f ENCODING -t ENCODING INPUTFILE

Original: https://www.cnblogs.com/zcj-0928/p/15845760.html
Author: 相遂
Title: vim的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524134/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang中字符串、数组、切片排序

    使用Golang的sort包用来排序,包括二分查找等操作。下面通过实例代码来分享下sort包的使用技巧: 使用接口排序: sort.Sort(data Interface) 自定义…

    Linux 2023年6月6日
    0101
  • 项目管理中的关键路径法-时窗图解法cpm

    完成单个活动所需的时间称为活动时间,可以形象地以一个矩形窗格来表示,这个窗格称为 时间窗口,简称 时窗。 1.1 分类 单位时窗: 基本时窗,时窗的不可分割的最小单元, 活动时窗:…

    Linux 2023年6月13日
    077
  • shell脚本

    1、什么是shell 什么是shell ? Shell(外壳) 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言, 又是一种程序设计语…

    Linux 2023年5月27日
    092
  • K8S 从私有仓库拉取镜像

    通常来讲,我们在通过公共镜像仓库拉取docker镜像的时候,不需要任何的认证操作,但我们在构建了企业的私有镜像以后,就不得不在拉取镜像之前通过用户名密码来完成认证。 在docker…

    Linux 2023年6月6日
    084
  • Django_模型详解

    Django_模型ORM Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作。 O是ob…

    Linux 2023年6月7日
    089
  • 不要让“Clean Code”更难维护,请使用“Rule of Three”

    当人们试图将”代码整洁之道(Clean Code)”的原则应用于现有的代码库时,我经常会问这个问题。 我认为这是合情合理的。 当我们开始重构遗留代码时,通常…

    Linux 2023年6月8日
    080
  • 内存管理-物理内存虚拟内存布局

    ARM-linux环境,物理内存和虚拟内存之间的映射关系: Original: https://www.cnblogs.com/fanguang/p/11930358.htmlAu…

    Linux 2023年6月6日
    076
  • Docker存储卷

    Docker存储卷 1、COW机制 Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果运行中的容器修改了现有的一个已…

    Linux 2023年6月7日
    068
  • JS 模块化- 01 模块化前传

    前端技术的发展不断融入了很多后端的思想,逐步形成前端的 “四个现代化”:工程化、模块化、规范化、流程化。这个主题介绍 模块化 ,主要内容包括模块化前传(早期…

    Linux 2023年6月6日
    089
  • Linux 系统IO响应缓慢系统hang住

    应急处理:reboot 解决方法: sysctl -w vm.dirty_ratio=10 sysctl -w vm.dirty_background_ratio=5 sysctl…

    Linux 2023年6月13日
    085
  • Linux静默安装weblogic12(fmw_12.1.3.0.0_wls.jar)

    1、安装JDK环境 2、创建安装用户 3、配置JAVA环境变量 4、创建响应文件wls.rsp 响应文件中的项一定要写全,否则会报奇怪的错误。 5、创建Loc文件oraInst.l…

    Linux 2023年6月14日
    085
  • 聊聊Netty那些事儿之从内核角度看IO模型

    从今天开始我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。 它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。 同时内置…

    Linux 2023年6月6日
    075
  • 配置免密登陆服务器

    前言 原来自己学习的时候在阿里云买自己的学习机,一台主机自己瞎折腾。但是参加工作以后管理的主机越来越多了,上服务器看的频率也越来越频繁,虽然有时候shell管理工具可以很方便的保存…

    Linux 2023年5月27日
    0114
  • Xshell中用./startup.sh启动时候提示权限不够

    授予脚本权限 chmod u+x *.sh 或者使用 chmod 777 ./service-demo.sh Original: https://www.cnblogs.com/q…

    Linux 2023年5月28日
    072
  • 每日好书推荐:《Kali Linux渗透测试的艺术》PDF高清版

    Original: https://www.cnblogs.com/bnn86/p/15344056.htmlAuthor: 测试楠楠君Title: 每日好书推荐:《Kali Li…

    Linux 2023年5月27日
    098
  • CentOS7安装部署Zabbix监控服务

    Zabbix Server通过Agent传来的数据写入数据库(MySQL),最终通过PHP+Apache在Web界面进行前端展示所以在启动Zabbix之前需要搭建LAMP环境 1、…

    Linux 2023年5月27日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球