【vim 学习系列文章 6 -- vim 如何从上次退出的位置打开文件】

文章目录

    • [1.1 vim 如何从上次退出的位置打开文件](#1.1 vim 如何从上次退出的位置打开文件)
    • [1.2 autogroup 命令学习](#1.2 autogroup 命令学习)
      • [1.2.1 augroup 基本语法](#1.2.1 augroup 基本语法)
    • [1.3 vim call 命令详细介绍](#1.3 vim call 命令详细介绍)

1.1 vim 如何从上次退出的位置打开文件

假设我打开了文件 test.c,然后我向下滚动到第 50 行,然后我做了一些修改并关闭了文件。当我重新打开文件时。我希望 光标定位到第 50 行。如何解决这个问题呢?

方法一

这是由 $VIMRUNTIME/defaults.vim 完成的,在 :h restore-cursor 下也有说明。

方法二
vim ~/.vimrc 然后添加下面内容

coffeescript 复制代码
augroup vimStartup | au!
    autocmd BufRead * call setpos('.', getpos("'\""))
augroup end

方法三:
vim ~/.vimrc 然后添加下面内容:

coffeescript 复制代码
if has("autocmd")
" In text files, always limit the width of text to 78 characters
autocmd BufRead *.txt set tw=100
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal g'\"" |
\ endif
endif

1.2 autogroup 命令学习

"augroup " 是 Vim 的一个命令,用于定义或管理自动命令组(autocommand groups)。在Vim中,自动命令(autocommands)是在某些特定事件(如文件保存、文件打开等)发生时自动执行的命令。通过使用 "augroup",我们可以将相关的自动命令组织在一起,这样在需要修改或删除这些命令时,就可以很方便地一次性管理整个组。

1.2.1 augroup 基本语法

"augroup" 命令的基本语法如下:

powershell 复制代码
augroup group-name 
	autocmd 
	... 
augroup end
  • "group-name" 是你为自动命令组指定的名称;
  • "autocmd ..."是你要定义的一个或多个自动命令。

举个例子,假设我们想要在每次保存.php文件时自动清除尾部的空白字符,我们可以定义如下的自动命令组:

powershell 复制代码
augroup TrimWhiteSpace autocmd! 
	autocmd BufWritePre *.php :%s/\s\+$//e 
augroup end

在上面的例子中,"TrimWhiteSpace " 是我们定义的自动命令组的名称,"autocmd BufWritePre *.php :%s/\s+$//e" 定义了一个自动命令,该命令在每次保存.php文件之前("BufWritePre"事件),执行一个删除行尾空白的替换操作。

需要注意的是,"autocmd!"命令用于清除当前组中已有的自动命令,保证我们每次运行这段代码时,都是在一个空的自动命令组中添加新的自动命令。这可以防止出现重复的自动命令。

另外,"augroup end"标记了自动命令组的结束,所有在"augroup"和"augroup end"之间定义的自动命令,都会被添加到当前的自动命令组中。

1.3 vim call 命令详细介绍

在 Vim 中,call 是一个内置的命令,主要用于调用 Vimscript 函数。以下是关于 call 命令的详细解释和示例:

call 命令的基本语法是 :

kotlin 复制代码
call functionname(arguments)

其中 functionname 是你要调用的函数的名称,arguments 是传递给函数的参数。在没有参数的情况下,你可以省略括号。

例如,你可以创建一个 Vimscript 函数来增加一个全局计数器:

kotlin 复制代码
let g:counter = 0

function! AddToCounter()
 	let g:counter += 1 
endfunction

然后,你可以使用 call 命令来调用这个函数:

kotlin 复制代码
:call AddToCounter()

这将会增加 g:counter 的值。

你也可以创建一个带参数的函数,例如,创建一个可以添加任意数量到计数器的函数:

kotlin 复制代码
function! AddToCounter(n) : 
	let g:counter += a:n 
endfunction

然后,你可以使用 call 命令并传递一个参数来调用这个函数:

kotlin 复制代码
call AddToCounter(5)

这将会把 5 加到 g:counter 的值上。

这就是 Vim call 命令的基本用法。通过使用 call 命令,你可以在 Vim 中调用自定义的 Vimscript 函数,实现更复杂的文本操作和编辑功能。

相关推荐
珹洺17 小时前
Linux操作系统从入门到实战(七)详细讲解编辑器Vim
linux·编辑器·vim
is08151 天前
vim扩展
linux·编辑器·vim
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 天前
Linux 下使用 vim 文本编辑器时的操作指令
linux·运维·vim
誰能久伴不乏4 天前
深入了解 Vim 编辑器:从入门到精通
linux·编辑器·vim
l1x1n04 天前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim
Shan12055 天前
编辑器Vim的快速入门
linux·编辑器·vim
禁默5 天前
Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
linux·vim·excel
Ronin3057 天前
【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile
linux·运维·服务器·ubuntu·编辑器·vim
朱杰jjj9 天前
Docker容器中无法使用vim、vi命令处理
docker·容器·vim
许白掰11 天前
Linux入门篇学习——Linux 帮助手册
linux·运维·服务器·嵌入式硬件·学习·编辑器·vim