vim
命令模式
在 Vim 中,有三个主要的模式:命令模式、插入模式和可视模式。命令模式是默认的模式,用于执行命令和移动光标。 具体命令: 移动光标操作:
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格 按「G」:移动到文章的最后 按「 $ 」:移动到光标所在行的“行尾” 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头 按「e」:光标跳到下个字的字尾 按「b」:光标回到上个字的开头 按「#l」:光标移到该行的第#个位置,如:5l,56l 按[gg]:进入到文本开始 按[shift+g]:进入文本末端 按「ctrl」 「b」:屏幕往“后”移动一页 按「ctrl」 「f」:屏幕往“前”移动一页 按「ctrl」 「u」:屏幕往“后”移动半页 按「ctrl」 「d」:屏幕往“前”移动半页
删除文字:
「x」:每按一次,删除光标所在位置的一个字符 「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符 「dd」:删除光标所在行 「#dd」:从光标所在行开始删除#行
复制:
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完 成复制与粘贴功能。
替换:
「r」:替换光标所在处的字符。
撤销上一次操作:
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。 「ctrl r」: 撤销的恢复
更改:
「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字
跳至指定的行:
「ctrl」 「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。
插入模式
进入插入模式的方式有三种:
- i:直接进入插入模式
- a进入插入模式之后向后跳一格
- o进入插入模式向下跳一行。
底行模式
列出行号:
「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。
跳到文件中的某一行:
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15, 再回车,就会跳到文章的第15行。
查找字符:
「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按 「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。 问题:/ 和 ?查找有和区别?操作实验一下
保存文件:
「w」: 在冒号输入字母「w」就可以将文件保存起来
离开vim:
「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。 「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
离开vim还有一种方法:shift zz可以直接退出vim
在底行模式中还可以进行多文件编译: vs 文件名可以打开多个文件:
进入之后可以对左右两个文件进行编译,如果还有其他文件还可以加进来。 如何判断我们当期在对哪个文件进行编译呢?光标所在处就是我们编译的文件 如何切换编译的文件呢?shift ww
vim配置
在vim中,配置文件通常是.vimrc文件,位于用户的主目录中。你可以通过在命令行中输入以下命令来编辑这个文件:
代码语言:javascript复制vim ~/.vimrc
下面是一些常见的 vim 配置选项和命令,可以添加到 .vimrc 文件中以定制你的 vim 编辑器体验:
基本配置
代码语言:javascript复制" 显示行号
set number
" 启用语法高亮
syntax on
" 设置缩进
set tabstop=4 " 制表符宽度
set shiftwidth=4 " 自动缩进宽度
set expandtab " 将制表符转换为空格
" 启用智能缩进
set smartindent
" 启用行号相对显示
set relativenumber
" 显示匹配的括号
set showmatch
" 启用行高亮
set cursorline
" 启用搜索高亮
set hlsearch
" 启用增量搜索
set incsearch
" 忽略搜索大小写
set ignorecase
set smartcase
" 启用鼠标
set mouse=a
" 设置显示的命令行高度
set cmdheight=2
" 禁用备份文件
set nobackup
set noswapfile
" 启用持久撤销
set undofile
" 设置剪切板共享
set clipboard=unnamedplus
外观配置
代码语言:javascript复制" 设置配色方案
colorscheme desert
" 显示状态栏
set laststatus=2
" 启用自动换行
set wrap
" 设置滚动偏移
set scrolloff=8
" 启用折叠
set foldmethod=syntax
set foldlevel=99
键映射
代码语言:javascript复制" 将jj映射为退出插入模式
inoremap jj <Esc>
" 快速保存
nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>a
" 快速退出
nnoremap <C-q> :q<CR>
inoremap <C-q> <Esc>:q<CR>
插件管理
如果你使用vim-plug作为插件管理器,可以在.vimrc中添加以下内容来管理插件:
- 安装vim-plug:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- 在.vimrc中添加插件配置:
" 初始化插件管理器
call plug#begin('~/.vim/plugged')
" 示例插件
Plug 'preservim/nerdtree' " 文件浏览器
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " 模糊查找
Plug 'tpope/vim-fugitive' " Git 集成
Plug 'airblade/vim-gitgutter' " Git 差异显示
Plug 'dense-analysis/ale' " 语法检查
Plug 'vim-airline/vim-airline' " 状态栏美化
Plug 'vim-airline/vim-airline-themes' " 状态栏配色方案
" 结束插件管理器
call plug#end()
- 重新启动vim,然后运行:PlugInstall来安装插件。
" 自动读取外部修改的文件
set autoread
" 设置文件编码
set encoding=utf-8
" 启用自动补全
set completeopt=menuone,noinsert,noselect
" 启用命令补全
set wildmenu
" 设置分屏
set splitbelow
set splitright
这些配置可以根据你的需求进行调整和扩展。保存 .vimrc 文件后,重新启动 vim 或执行 :source ~/.vimrc 以应用更改。
Linux编译器gcc
首先我们先对C语言的这几个生成可执行程序的这几个过程进行了解:
- 预处理
可以看见,生成了一个.i的文件:
- 编译
可以看见,生成了一个.s的文件:
- 汇编(将汇编语言转换成机器码)
形成:
- 连接
形成:
这就是我们的可执行程序:
可以看见是可以运行的。
函数库
函数库分为静态和动态函数库。 概念:一组预先编写的函数和程序模块的集合,用于提供特定的功能或服务,从而简化开发过程。函数库通过封装常见的操作和功能,使得开发者能够重用已有的代码,减少重复劳动,提高开发效率。
在Linux中:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。
如何查看当前可执行程序依赖哪些库:
代码语言:javascript复制ldd 可执行程序
在这些库当中libbc.so.6
就是一个动态库。
如何查看当前可执行文件是动态链接还是静态链接:
file 可执行程序
可以看见,上面的code就是一个动态链接。 动态链接的优点和缺点:
如何形成静态链接:
用gcc编译的时候默认是动态链接,只需要在后面加上一个选项就会变成静态链接,但是我们使用的有些是远程服务器是默认没有静态库的,所以需要下载,只需要用下面指令进行下载即可:
代码语言:javascript复制sudo dnf install glibc-static
下载好之后,就不会报错了,可以看见我们形成了一个文件,我们来查看一下这个文件的属性。
可以看见,则合格文件的属性是静态链接。 静态链接的优点和缺点:
动态链接和静态链接大小的比较:
可以很明显的发现,静态链接出来的可执行程序大的多,浪费的资源大得多。
总结
在这篇博客中,我们探讨了两款 Linux 开发工具:vim 和 gcc。作为开发者,掌握这些工具不仅能够提升我们的开发效率,还能使我们在编程过程中更加得心应手。
vim 是一款强大的文本编辑器,以其灵活的操作和广泛的插件支持著称。通过掌握 vim 的基本操作和高级功能,我们可以在编写代码时更加高效,并能够定制出符合自己需求的开发环境。虽然 vim 的学习曲线可能较陡,但一旦熟练掌握,其高效的编辑能力将成为我们不可或缺的利器。
gcc 是 GNU Compiler Collection 的缩写,是 Linux 平台上最常用的编译器之一。它支持多种编程语言,并提供了强大的编译选项和优化功能。通过使用 gcc,我们能够将源代码编译成高效的可执行文件,并对程序进行调试和优化。了解 gcc 的基本用法和编译选项,将帮助我们更好地管理和构建我们的项目。
总之,vim 和 gcc 是 Linux 环境下进行开发的基础工具。掌握它们不仅能够提高我们的生产力,还能为我们的开发工作提供坚实的支持。希望通过这篇博客,能够帮助大家更好地了解和使用这些工具,为后续的开发工作打下良好的基础。继续探索和学习,相信你会发现更多工具和技巧,让你的开发之路更加顺畅。