vim 插入操作
vim如何倒序文件
执行下面的命令
1 | :g/.*/mo0 |
或者
1 | :g/^/mo0 |
从第一行开始,匹配每一行,然后执行mo(move)操作移动到第0行。如此处理每一行,直到文本末行。执行完毕文本逆序化成功!
比如,原来的文件为:
1 | 1 |
经过操作后,会更新为:
1 | 9 |
.. _linux_apt_beginner:
.. note::
当年不肯嫁春风,无端却被秋风误。
贺铸《芳心苦·杨柳回塘》
对于最常用的命令而言,apt
可能排不上号,但是,在新安装的系统中,apt
命令绝对应该是排在前十位的存在,所以apt
是管理 Debian 系列系统中软件包的必备工具。
apt - command-line interface
apt是Advanced Package Tool的缩写,恰如字面描述高级包工具,apt
命令是用于 Debian 系列 Linux 发行版的强大工具,比如广为人知的Ubuntu,还有超赞桌面的Linux Mint。
apt
使得处理软件包,比如安装、更新和删除软件包的过程特别丝滑,也结合了较早的工具如 apt-get
和 apt-cache
的功能,提供了更友好的交互体验。
在安装或升级软件包之前,可以更新软件包列表,以确保拥有可用软件包的最新信息。
使用以下命令:
1 | $ sudo apt update |
此命令从配置的仓库中获取最新的软件包信息。
要将所有已安装的软件包升级到最新版本,可以使用:
1 | $ sudo apt upgrade |
要进行更全面的升级,包括删除旧软件包和安装新依赖项,请使用:
1 | $ sudo apt full-upgrade # 特别留意,这个会把老版本给删除 |
apt
命令使得软件包安装变得非常简单。要安装一个软件包,只需要使用:
1 | $ sudo apt install <软件包名称> |
例如,要安装文本编辑器瑞士军刀 vim
,您可以运行:
1 | $ sudo apt install vim |
卸载软件包同样简单。要删除一个软件包,使用:
1 | $ sudo apt remove <软件包名称> |
如果您想删除软件包及其配置文件,使用:
1 | $ sudo apt purge <软件包名称> |
要查找某个软件包,可以使用关键词进行搜索:
1 | $ apt search <关键词> |
例如,要搜索与 “python” 相关的软件包,您可以运行:
1 | $ apt search python |
要查看特定软件包的详细信息,使用:
1 | $ apt show <软件包名称> |
此命令提供软件包描述、依赖关系和版本信息等详细信息。
随着时间的推移,积累过时的软件包和缓存文件。要清理不必要的软件包,使用:
1 | $ sudo apt autoremove |
要清除本地存储库中获取的包文件,使用:
1 | $ sudo apt clean |
apt
获取软件包信息的仓库列表存储在 /etc/apt/sources.list
及 /etc/apt/sources.list.d/
目录下的文件中。
要添加新的仓库,可以直接编辑这些文件或使用 add-apt-repository
命令:
1 | $ sudo add-apt-repository ppa:<仓库名称> |
添加仓库后,需要更新软件包列表才能使用:
1 | $ sudo apt update |
.. note::
物是人非事事休,欲语泪先流。
李清照《武陵春·春晚》
知道了我是谁,接下来就要知道谁是谁了。
who
将显示谁在登录,显示的内容可能包括用户名、终端登录口,登录的时间等等信息。
官方定义为:
who - show who is logged on
用法为:
1 | $ who [OPTION]... [ FILE | ARG1 ARG2 ] |
常用的参数为:
-q , --count
:只显示登入系统的帐号名称和总人数;-s
:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;-a, --all
:效果为加上 -b -d --login -p -r -t -T -u
-b, --boot
:上一次系统的重启时间-d, --dead
:打印dead进程 -H, --heading
:打印每一列的表头-q, --count
:所有登录的用户名以及用户登录的数量-s, --short
:打印USER/LINE/WHEN(默认为这个参数)显示当前登录系统的用户
1 | $ who |
这个信息显示系统自上一次重启后的运行时间。
1 | $ who -b |
使用-H
或者--heading
可以看到表头信息
1 | $ who -H |
1 | $ who -q |
.. note::
当年不肯嫁春风,无端却被秋风误。
贺铸《芳心苦·杨柳回塘》
我从ubuntu开始,后面短暂切换到Fedora,然后切换到CentOS,在CentOS断更之前,再无改变,所以最了解的还是yum命令了。
官方定义为:
yum - Yellowdog Updater Modified
说实话,yum跟yellowdog感觉半毛线关系都没有,那为什么有这个名字呢?
其实曾经有一个基于PowerPC架构的Linux发行版,名为Yellow Dog Linux。
而yum
的名字即来源于此,且为其改进版本。
yum
是一个强大的包管理工具,常用于 Red Hat 系的 Linux 发行版,如 CentOS、Fedora 和 RHEL。
它简化了安装、更新、删除和管理软件包的过程。
基本其他基于RPM的Linux发行版也使用这个命令。
其他列出了一些常用和不太常用的命令,基本足矣。
使用 yum
安装软件包的基本语法是:
1 | $ sudo yum install package_name |
例如,要安装 wget
软件包,可以使用以下命令:
1 | $ sudo yum install wget |
yum
会自动解决依赖关系,确保所有必需的软件包都被安装。
保持系统更新对于安全性和性能非常重要。要更新特定的软件包,使用:
1 | $ sudo yum update package_name |
例如,更新 wget
:
1 | $ sudo yum update wget |
要更新所有已安装的软件包,只需运行:
1 | $ sudo yum update |
如果需要删除一个软件包,语法如下:
1 | $ sudo yum remove package_name |
例如,删除 wget
:
1 | $ sudo yum remove wget |
yum
将处理指定软件包的删除,并删除不再需要的依赖项。
要检查是否有可用更新而不实际应用它们,使用:
1 | $ yum check-update |
此命令会列出所有有可用更新的软件包,帮助您决定哪些需要更新。
要列出系统上所有已安装的软件包,运行:
1 | $ yum list installed |
此命令提供了当前已安装的所有软件包的详细列表。
如果不确定软件包的确切名称,可以使用:
1 | $ yum search keyword |
例如,搜索与 wget
相关的软件包:
1 | $ yum search wget |
此命令会返回与关键字匹配的软件包列表。
要查看特定软件包的详细信息,使用:
1 | $ yum info package_name |
例如,获取 wget
的信息:
1 | $ yum info wget |
此命令提供软件包的详细信息,如版本、发布、大小和简短描述。
yum
缓存随着时间推移,yum
的缓存会增长并占用磁盘空间。要清理缓存,使用:
1 | $ sudo yum clean all |
此命令会删除缓存数据,释放空间,并确保 yum
获取最新的软件包信息。
yum
使用仓库作为软件包的来源。要列出所有配置的仓库,运行:
1 | $ yum repolist |
启用特定仓库:
1 | $ sudo yum-config-manager --enable repository_name |
禁用特定仓库:
1 | $ sudo yum-config-manager --disable repository_name |
如果需要安装特定版本的软件包,使用:
1 | $ sudo yum install package_name-version |
例如,安装 wget
的 1.20
版本:
1 | $ sudo yum install wget-1.20 |
要将软件包降级到以前的版本,使用:
1 | $ sudo yum downgrade package_name |
yum
允许您安装为特定目的而设计的一组软件包。例如,安装开发工具组,使用:
1 | $ sudo yum groupinstall "Development Tools" |
如果在函数调用中“0”或“NULL”用作参数,把它转换成被调函数需要的指针类型即可;
求商和余数的函数div
。
函数atoi
和atol
执行基数为10的转换;
而函数strtol
和strtoul
允许你在转化时指定基数,同时还允许访问字符串的剩余部分。
函数modf
把一个浮点值分成整数和小数两个部分。
setjmp
和longjmp
函数提供了一种类似goto
语句的机制,但它并不局限于一个函数的作用域之内。这些函数常用于深层嵌套的函数调用链。
信号表示一种事件,它可能异步地发生,也就是并不予程序执行过程的任何时间同步。
由于信号可能在任何时候发生,所以由信号处理函数修改的变量的值可能会在任何时候发生改变。因此,我们不能指望这些变量在两条相邻的程序语句中肯定具有相同的值。volatile
关键字告诉编译器这个事实,防止它以一种可能修改程序含义的方式“优化”程序。
通常情况下,上面的程序会认为第二个测试和第一个测试具有相同的结果
而如果把变量value声明为volatile
类型的,就不会进行此类优化。
有时,如果不用volatile
修饰符,可能无法编写多线程程序,要么编译器失去大量优化的机会。
abort
函数用于不正常地终止一个正在执行的程序;atexit
函数可以把一些函数注册为退出函数exit function;exit
函数用于正常终止程序;宏assert(test)
用于检测test是否为真。用这种方法可以使调试变得更容易。并且我们可以在头文件assert.h
被包含之前,添加#define NDEBUG
皆可以禁用所有的断言。
总结
frexp
和ldexp
函数在创建与机器无关的浮点数表示形式方面是很有用的。frexp
函数用于计算一个给定值的表示形式;ldexp
函数用于解释一个表示形式,恢复它的原先值;qsort
函数把一个数组中的值按照升序进行排序;bsearch
函数用于在一个已经排好序的数组中用二分法查找一个特定的值;locale
就是一组函数,根据世界各国的约定差异对C程序的行为进行调整;setjmp
和longjmp
可能导致晦涩难懂的代码;其实只要试用一下Final_Vim就知道为什么了。
无论在Windows,Linux, Solaris, FreeBSD等等操作系统上,以及一些名都 没有听过的系统上,你都可以找到它。这样就保证了你的学习投资的保值性,特别在一些古老的大型机上的系统上,即使没有Vim,一般来说,还有Vi的,这样一般简单的操作命令还是可复用的。如果你确定你一直只呆在Windows上可忽略这一点。
Vim是开源软件,意味着你可以自由使用,修改,查看它的代码。对于自由查看,修改程序代的保证,有总比没有好。
Vim是程序员的编辑器,当然对程序员是非常友好的。它对 C,C++, Python, Perl, Tcl, Ruby, PHP等等,以及一大堆我没有听过见过的语言,以语法着色,代码缩进等基本支持,还有一些其他特性。
Vim的操作方式相对于Windows上呆久了的人来说,是蛮奇特的,这一点我深有体会。但是正如很多人讲的那样,你掌握了其操作后,发现它会大大增进你的编辑速度。你的双手根本不用离开键盘,就完成了许多事情,可以让鼠标歇会儿了。
vim可自定义的地方太多了,你可以自定义键盘映射,语法着色,缩进,格式等等。所以你在网上可以看到许多人贴着自己的vimrc配置文件,配置自己喜欢的作业环境。如果你需要开盒即用的工具,那么这点对你的吸引力就不大了。
比如,我们计算年级学生的平均成绩,但是不知道有多少学生,可以定义一个很大的数组,确保学生个数不会超出数组定义范围,但是如果学生人数很少,就会造成巨大的浪费。所以会有如下缺点:
c函数库提供了两个函数,malloc和free,分别用于执行内存分配和释放。这些函数维护一个可用内存池。当一个程序另外需要一些内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序放回一个指向这块内存的指针。注意,现在这块内存并没有以任何方式进行初始化。
free的参数要么是NULL,要么是一个先前从malloc、calloc或realloc返回的值。向free传递一个NULL参数不会产生任何效果。
And我们知道malloc的返回值为void *,所以malloc可以指向任何类型的整数、浮点值、结构或者数组,这个需要我们自己定义。
malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。这个初始化常常能带来方便,但是如果你的程序只是想把一些值存储到数组中,那么这个初始化过程就纯属浪费时间;两者的另外一个较小的区别是它们请求内存数量的方式不同,calloc的参数包括所需元素的数量和每个元素的字节数。
realloc函数用于修改一个原先已经分配的内存块的大小。如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并把原先那块内存的内容复制到新的块上。
如果realloc函数的第一个参数是NULL,那么它的行为就和malloc一摸一样。
使用动态内存常犯的错误就是忘记检查所请求的内存是否成功分配?第二大错误是操作内存时超出了分配内存的边界。
分配内存但在使用完毕后如果不释放将引起内存泄露memory leak。
动态内存分配一个常见的用途就是为那些长度在运行时才知的数组分配内存空间。