Linux 中的 vim 的配置

版权声明:码字不易,欢迎点赞。 https://blog.csdn.net/weixin_40255793/article/details/84135210

和 vim 相关的文件

① ~/.viminfo

如果我们在 vim 中查找过字符串,那么这个字符串就会被反白:
在这里插入图片描述

退出后,再次以 vim 来编辑这个文件是,该查找过的字符串还是反白状态,而且第二次进入该文件时,光标就出现在上次退出的那一行。这是因为这些操作记录被保存在了 ~/.viminfo 这个文件中。

② ~/.vimrc

vim 的操作环境可以通过配置文件来规定,整体的 vim 设置值放在 /etc/vimrc 文件中,鸟哥不建议我们修改它,可以修改 ~/.vimrc 文件(默认不存在,需要手动建立)。如下是我的配置值:

我的 vim 的基本配置(~/.vimrc):

" 基本设置
set nu                      "显示行号
set bg=dark            "底色色调
set laststatus=2      "最下面的状态栏显示两行
syntax on               "语法高亮
set hlsearch	          "高亮度反白
set autoindent        "自动缩进
set smartindent     "和 autoindent 配合,在特殊符号后有自动缩进

" Tab 设置
set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab

" 自动配对设置
inoremap ( ()<Esc>i
inoremap [ []<Esc>i
inoremap " ""<Esc>i
inoremap ' ''<Esc>i
inoremap { {<CR>}<Esc>O

临时设置可以在 vim 中使用 set 命令,如:

:set nu
:set nonu

vim 中的 Tab 设置

制表符 \t,在 c 语言的 printf 函数中是 8 个字符宽度。而我们在使用有些编辑器时,习惯按 Tab 键输入制表符显示 4 个字符宽度,在其他编辑器上打开时,\t 被当作 8 个字符宽度显示出来又会看起来很奇怪,因此有一种解决方案就是使用多个空格符来实现制表符的显示效果,这样在不同的编辑器中显示效果相同。vim 编辑器就提供了这种设置。

具体的选项含义,可以在 vim 中使用命令 :help 'optionname' 来查看(例如 :help smarttab)。

  • tabstopts:文件中的实际制表符的(最大)宽度,默认为 8。
  • softtabstopstp:在编辑模式中,按 Tab 键会插入空格符或 \t 的混合(如果设置了 expandtab 那么只插入空格)来实现 stp 的宽度,\t 显示的宽度为 ts 的值。sts 为 0 时,此设置无效。
  • expandtabet:在插入模式,Tab 键只会插入空格而不是 \t,会影响 retab 的效果。当设置了 compatible 时,此值会重置。
  • noexpandtabet:和 expandtabnoet 相反。
  • shiftwidth:行首缩进的宽度,和 smarttab 配合使用。
  • smarttabsta:插入模式下,光标在行首时,Tab 键会根据 shiftwidth 的值来插入空格和 \t 的组合。tabstopsofttabstop 使用在其他地方的 Tab。Backspace 会删除行首 shiftwidth 对应的空格或 \t。

推荐设置

① 制表符宽度为 8,但行首用按 Tab 键用 4 个空格缩进 4 个字符,其他位置按 Tab 键也用空格实现制表符宽度:

set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab

② (我的配置)制表符宽度为 4,行首用按 Tab 键用制表符缩进 4 个字符,其他位置按 Tab 键用空格实现制表符宽度:

set tabstop=4 softtabstop=0 expandtab shiftwidth=4 smarttab

示例

我们来用 vim 编辑一段常见的代码:

#include <stdio.h>

int main()
{
	printf("hello, world\n");
	return 0;
}

① 使用 vim 默认的设置

set tabstop=8 softtabstop=0 noexpandtab shiftwidth=8

在这里插入图片描述

我们看一下字符编码,使用 od -t oCc hello.c 命令:

0000000 043 151 156 143 154 165 144 145 040 074 163 164 144 151 157 056
          #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
0000020 150 076 012 012 151 156 164 040 155 141 151 156 050 051 012 173
          h   >  \n  \n   i   n   t       m   a   i   n   (   )  \n   {
0000040 012 011 160 162 151 156 164 146 050 042 150 145 154 154 157 054
         \n  \t   p   r   i   n   t   f   (   "   h   e   l   l   o   ,
0000060 040 167 157 162 154 144 134 156 042 051 073 012 011 162 145 164
              w   o   r   l   d   \   n   "   )   ;  \n  \t   r   e   t
0000100 165 162 156 040 060 073 012 175 012
          u   r   n       0   ;  \n   }  \n
0000111

默认模式 Tab 键输入 \t,在编辑器中占 8 个字符位置。

② 使用模式一的配置

set tabstop=8 softtabstop=4 shiftwidth=4 noexpandtab

在这里插入图片描述

0000000 043 151 156 143 154 165 144 145 040 074 163 164 144 151 157 056
          #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
0000020 150 076 012 012 151 156 164 040 155 141 151 156 050 051 012 173
          h   >  \n  \n   i   n   t       m   a   i   n   (   )  \n   {
0000040 012 040 040 040 040 160 162 151 156 164 146 050 042 150 145 154
         \n                   p   r   i   n   t   f   (   "   h   e   l
0000060 154 157 054 040 167 157 162 154 144 134 156 042 051 073 012 040
          l   o   ,       w   o   r   l   d   \   n   "   )   ;  \n    
0000100 040 040 040 162 145 164 165 162 156 040 060 073 012 175 012
                      r   e   t   u   r   n       0   ;  \n   }  \n
0000117

我们发现行首的 Tab 键启用了 shiftwidth 的值,输入的是 4 个 \040(空格),在编辑器中也就显示了 4 个字符的位置。

③ 第二种设置

set tabstop=4 shiftwidth=4 noexpandtab

在编辑器中的效果和第 ② 个一样,编码如下:

0000000 151 156 143 154 165 144 145 040 074 163 164 144 151 157 056 150
          i   n   c   l   u   d   e       <   s   t   d   i   o   .   h
0000020 076 012 012 151 156 164 040 155 141 151 156 050 051 012 173 012
          >  \n  \n   i   n   t       m   a   i   n   (   )  \n   {  \n
0000040 011 160 162 151 156 164 146 050 042 150 145 154 154 157 054 040
         \t   p   r   i   n   t   f   (   "   h   e   l   l   o   ,    
0000060 167 157 162 154 144 134 156 042 051 073 012 011 162 145 164 165
          w   o   r   l   d   \   n   "   )   ;  \n  \t   r   e   t   u
0000100 162 156 040 060 073 012 175 012
          r   n       0   ;  \n   }  \n
0000110

括号自动补全的设置

vim 中有一个映射的语法inoremap {lhs} {rhs},将按键序列 {lsh} 映射为 {rhs}。可以用来实现符号的自动配对。

inoremap ( ()<Esc>i
inoremap [ []<Esc>i
inoremap " ""<Esc>i
inoremap ' ''<Esc>i
inoremap { {<CR>}<Esc>O
符号缩写 含义
<CR> Carriage Return,即回车符
<Esc> Escape,即 ESC 按钮

更多符号的含义请参考 https://vi.stackexchange.com/questions/10174/how-to-map-num-keys

猜你喜欢

转载自blog.csdn.net/weixin_40255793/article/details/84135210
今日推荐