There is an joke about a visitor to NewYork City asking a passerby for directions to the city's famous classical music venue(聚集地点,会场):

Visitor:Excuse me,how do I get to Carnegie(卡内基) Hall?

Passerby:Practice,practice,practice!

Learning the Linux command line,like becoming an accomplished(完成了的,实现了的,竣工的,聪明的,有才艺的,娴熟的,善于交际的,多社交才能的,任务已完成) pianist,is not something that we pick up in an afternoon.It takes years of practice.In this chapter,we will introduce the vi(pronounced "vee eye") text editor,one of the core programs in the Unix tradition.vi is somewhat notorious(臭名昭著的,声名狼藉的) for its difficult user interface,but when we see a master sit down at the keyboard and  begin to "play,"we will indeed be witness(目击人,见证人) to some great art.We won't become masters in this chapter,but when we are done,we will know how to play"chopsticks" in vi.

Why we should learn vi

In this modern age of graphical editors and easy-to-use text-based editors such as nano,why should we learn vi?There are three good reasons:

  • vi is always avilable.This can be a lifesaver if we have a system with no graphical interface,such as a remote server or a local system with a broken X configruation.nano,while increasingly popular is still not universal.POSIX,a standard for program compatibility on Unix systems,requires that vi be present.
  • vi is lightweight and fast.For many tasks,it's easier to bring up vi than it is to find the graphical text editor in the menus and wait for its multiple megabytes(兆字节) to load.In addition,vi is designed for typing speed.As we shall see,a skilled vi user never has to lift his or her fingers from the keyboard while editing.
  • We don't want other Linux and Unix users to think we are sissies(胆小鬼).

Okay,maybe two good reasons.

A Little Background(一点儿背景介绍)

The first version of vi was written in 1976 by Bill Joy,a University of California at Berkley student who later went on to co-found(共发现) Sun Microsystems. vi derives(得到,源于) its name from the word "visual,(视觉的,看得见的)" because it was intended to allow editing on a video terminal with a moving cursor.Previous to visual editors(在发明可视化编辑器之前),there were line editors which operated on a single line of text a time.To specify(指定) a change,we tell a line editor to go to a particular line and describe what change to make,such as adding or deleting text.With the advent(出现,到来) of video terminals(rather than printer-based terminals like teletypes) visual editing became possible.vi actually incorporates(包含,加上,把...合并) a powerful line editor called ex,and we can use line editing commands while using vi.

Most Linux distributions don't include real vi;rather,they ship with an enhanced replacement called vim(which is short for "vi improved")written by Bram Moolenaar. vim is a substantial(实质的) improvement over traditional Unix vi and is usually symbolically linked(or aliased)to the name "vi" on Linux systems.In the discussions that follow,we will assume that we have a program called "vi" that is really vim.

Starting And Stopping vi

To start vi,we simply type the following:

And a screen like this should appear:

Just as we did with nano earlier,the first thing to learn is how to exit.To exit,we enter the following command(note that the colon(冒号) character is part of the command):

The shell prompt should return.If ,for some reason,vi will not quit(usually because we made a change to a file that has not yet been saved),we can tell vi that we really mean it by adding an exclamation point to the command:

Tip:If you get "lost" in vi,try pressing the Esc key twice to find your way again.

Compatibility Mode

In the example startup screen above (taken from Ubuntu 8.04),we see the text "Running in Vi compatible mode." This means that vim will run in a mode that is closer to the normal behavior of vi rather than the enhanced behavior of vim.For purposes of this chapter,we will want to run vim with its enhanced behavior.To do this,you have a few options:

Try running vim instead of vi.

If that works,consider adding alias vi='vim' to your .bashrc file.

Alternately,use this command to add a line to your vim configuration file:

echo "set nocp" >> ~/.vimrc

Different Linux distributions package vim in diferent ways.Some distributions install a minimal version of vim by default that only supports a limiting set of vim features.While preforming the lessions that follow,you may encounter missing features.If this is the case,install the full version of vim.

Editing Modes

Let's start up vi again,this time passing to it the name of a nonexistent(不存在的) file.This is how we can create a new file with vi:

If all goes well,we should get a screen like this:

The leading tilde(波浪字符) characters("~") indicate that no text exists on that line.This shows that we have an empty file.Do not type anything yet!

The second most important thing to learn about vi(after learning how to exit) is that vi is a modal(模式) editor.When vi starts up,it begins in command mode.In this mode,almost every key is a command,so if we were to start typing,vi would basically go crazy and make a big mess.

Entering Insert Mode(插入模式)

In order to add some text to our file,we must first enter insert mode.To do this,we press the "i" key.Afterwards,we should see the following at the bottom of the screen if vim is running in its usual enhanced mode(this will not appear in vi compatible mode):

Now we can enter some text.Try this:

To exit insert mode and return to command mode,press the Esc key.

Saving Our Work

To save the change we just made to our file,we must enter an ex command mode.This is easily done by pressing the ":" key.After doing this,a colon character should appear at the bottom of the screen:

To write our modified file,we follow the colon with a "w" then Enter:

The file will be written to the hard drive and we should get a confirmation message at the bottom of the screen,like this:

Tip:If you read the vim documentation,you will notice that (confusingly) command mode is called normal mode and ex commands are called command mode.Beware.

Moving The Cursor Around

While in command mode,vi offers a large number of movement commands,some of which it shares with less.Here is a subset(子集):

Table 13-1:Cursor Movement Keys

Key Move The Cursor
l or Right Arrow Right one character.
h or Left Arrow Left one character
j or Down Arrow Down one line
k or Up Arrow Up one line
o(zero) To the beginning of the current line.
^ To the first non-whitespace character on the current line.
$ To the end of the current line.
w To the beginning of the next word or puntuation character.
W To the beginning of the next word,ignoring puntuation character
b To the beginning of the previous word or punctuation character.
B To the beginning of the previous word,ignoring punctuation character.
Ctrl-f or Page Down Down one page.
Ctrl -b or Page Up Up one page
numberG To line number.For example,1G moves to the first line of the file.
G To the last line of the file.

Why are the h,j,k,and l keys used for cursor movement?Because when vi was originally written,not all video terminals had arrow keys,and skilled typists could use regualr keyboard keys to move the cursor without ever having to lift their fingers from the keyboard.

Many commands in vi can be prefixed with a number,as with the "G" command listed above.By prefixing a command with a number,we may specify(指定) the number of times a command is to be carried out.For example,the command "5j" causes vi to move the cursor down five lines.

Basic Editing

Most editing consists of a few basic operations such as inserting text,deleting text and moving text around by cutting and pasting.vi,of course,supports all of these operations in its own unique way.vi also provides a limited form of undo(撤消).If we press the "u" key while in command mode,vi will undo the last change that you made.This will come in handy as we try out some of the basic editing commands.

Appending text

vi has several different ways of entering insert mode.We have already used the i command to insert text.

Let's go back to our foo.txt file for a moment:

If we wanted to add some text to the end of this sentence,we would discover the the i command will not do it(瞎搞吧,行的呀),since we can't move the cursor beyond the end of the line. vi provides a command to append text,the sensibly(明智的)named "a" command.If we move the cursor to the end of the line and type "a",the cursor will move past the end of the line and vi will enter insert mode.This will allow us to add some more text:

!!!!!!!!!!!!!!经实验(用RHEL7.0)i命令也是能完成在句子的末尾添加一些文本的,i 和a的不同是:输入i后,光标还是在之前定位的地方,输入a后光标会向后移动一个字符。

Remember to press the Esc key to exit insert mode.

Since we will almost always want to append text to the end of a line,vi offers a shortcut to move to end of the current line and start appending.It's the "A" command.Let's try it and add some more lines to our file.

First,we'll move the cursor to the beginning of the line using the "0"(zero) command.Now we type "A" and add the following lines of text:

Again,press the Esc key to exit insert mode.

As we can see,the "A" command is more useful as it moves the cursor to the end of the line before starting insert mode.

Open a line

Another way we can insert text is by "opening" a line.This inserts a blank line between two existing lines and enters insert mode.This has two variants(变体):

Table 13-2:Line Opening Keys

Command Opens
o The line below the current line
O The line above the current line

We can demonstrate this as follows:place the cursor on "Line 3" then press the o key.

A new line was opened below the third line and we entered insert mode.Exit insert mode by pressing the Esc key.Press the u key undo our change.

Press the O key to open the line above the cursor:

Exit insert mode by pressing the Esc key and undo our change by pressing u.

Deleting Text
As we might expect,vi offers a variety of ways to delete text,all of which contain one of two keystrokes.First,the x key will delete a character at the cursor location.x may be preceded(在...之前) by a number specifying(指定,列举,详细说明,把...列入说明书) how many characters are to be deleted.The d key is more general purpose.Like x,it may be preceded by a number specifying  the number of times the deletion is to be performed.In addtion,d is always followed by a movement command that controls the size of the deletion.Here are some examples:

Table 13-3:Text Deletion Commands

Command Deletes
x The current character.
3x The current character and the next two character.
dd The current line.
5dd The current line and the next four lines.
dW From the cursor position to the beginning of the next word.
d$ From the cursor position to the end of the current line.
do From the cursor position to the beginning of the current line.
d^ From the cursor position to the first non-whitespace character of the line.
dG From the current line to the end of the file.
d20G From the current line to the twentieth line of the file.          

Place the cursor on the word "It" on the first line of our text.Press the x key repeatedly until the rest of the sentence is deleted.Next,press the u key repeatedly until the deletion is undone.

Note:Real vi only supports a single level of undo.vim supports multiple levels.

Let's try the deletion again,this time using the d command.Again,move the cursor to the word "It" and press dW to delete the word:

Press d$ to delete from the cursor position to the end of the line:

Press dG to delete from the current line to the end of the file:

Press u three times to undo the deletion.

Cutting,Copying And Pasting Text

The d command not only deletes text,it also "cuts" text.Each time we use the d command the deletion is copied into a paste buffer(think clipboard) that we can later recall with the p command to paste the contents of the buffer after the cursor or the P command to paste the contents before the cursor.

The y command is used to "yank"(copy) text in much the same way the d command is used to cut text.Here are some examples combining the y command with various movement commands:

Table 13-4:Yanking Commands

Command Copies
yy The current line.
5yy The current line and the next four lines.
yW From the current cursor position to the beginning of the next word.
y$ From the current cursor location to the end of the current line.
y0 From the current cursor location to the beginning of the line.
y^ From the current cursor location to the first non-whitespace character in the line.
yG From the current line to the end of the file.
y20G From the current line to the twentieth line of the file.

Let's try some copy and paste.Place the cursor on the first line of the text and type yy to copy the current line.Next,move the cursor to the last line (G) and type p to paste the line below the current line:

Just as before,the u command will undo our change.With the cursor still positioned on the last line of the file,type P to paste the text above the current line:

Try out some of the other y commands in the table above and get to know the behavior of both the p and P commands.When you are done,retrun the file to its original state.

Joining Lines

vi is rather strict about its idea of a line.Normally,it is not possible to move the cursor to the end of a line and delete the end-of-line character to join one line with the one below it.Because of this,vi provides a specific command,J(not to be confused with j,which is for cursor movement) to join lines together.

If we place the cursor on line 3 and type the J command,here's what happens:

Search And Replace

vi has the ability to move the cursor to locations based on searches.It can do this on both a single line or over an entire file.It can also perform text replacements with or without confirmation from the user.

Searching Within A Line

The f command searches a line and moves the cursor to the next instance of a specified character.For example,the command fa would move the cursor to the next occurrence of the character "a" within the current line.After performing a character search within a line,the search may be repeated by typing a semicolon(分号).

Searching The Entire File

To move the cursor to the next occurrence of a word or phrase,the / command is used.This works the same way as we learned earlier in the less program.When you type the /command a "/" will appear at the bottom of the screen.Next,type the word or phrase to be searched for,followed by the Enter key.The cursor will move to the next location containing the search string.A search may be repeated using the previous search string with the n command.Here's an example:

Place the cursor on the first line of the file.Type:

followed by the Enter key.The cursor will move to line 2.Next,type n and cursor will move to line 3. Reapeating the n command will move the cursor down the file until it runs out of matches.While we have so far only used words and phrases for our search patterns,vi allows the use of regular expressions,a powerful method of expressing complex text patterns.We will cover regular expressions in some detail in a later chapter.

Global Search And Replace

vi uses an ex command to perform search and replace operations(called "substitution" in vi) over a range of lines or the entire file.To change the word "Line" to "line" for the entire file,we would enter the following command:

Let's break this command down into separate items and see what each one does:

Item Meaning
: The colon character starts an ex command.
% Specifies the range of lines for the operation.% is a shortcut meaning from the first line to the last line.Alternately,the range could have been specified 1,5(since our file is five lines long),or 1,$ which means "from line 1 to the last line in the file."If the range of lines is omitted,the operation is only performed on the current line.  
s Specifies the operation.In this case,substitution(search and replace)
/Line/line The search pattern and the replacement text.
g This means "global" in the sense that the search and replace is performed on every instance of the search string in the line.If omitted,only the first instance of the search string on each line is replaced.

After executing our search and replace command our file looks like this:

We can also specify a substitution command with user confirmation.This is done by adding a "c" to the end of the command.For example:

This command will change our file back to its previous form;however,before each substitution,vi stops and asks us to confirm the substitution with this message:

Each of the characters within the parentheses(圆括号) is possible choice as follows:

Table 13-5:Replace Confirmation Keys

Key Action
y Perform the substitution.
n Skip this instance of the pattern.
a Perform the substitution on this and all subsequent instances of the pattern. (equal  :%s/Line/line/g 中的g)
q or esc Quit the substituation.
l Perform this substitution and then quit.Short for "last".
Ctrl-e,Ctrl-y Scroll down and scroll up,respectively.Useful for viewing the context of the proposed substitution.

If you type y,the substitution will performed,n will cause vi to skip this instance and move on to the next one.

Editing Multiple Files

It's often useful to edit more than one file at a time.You might need to make changes to multiple files or you may need to copy content from one file into another.With vi we can open multiple files for editing by specifying them on the command line:

Let's exit our existing vi session and create a new file for editing.Type:wq to exit vi saving our modified text.Next,we'll create an additional file in our home directory that we can play with.We'll create the file by capturing some output from the ls command:

Let's edit our old file and our new one with vi:

vi will start up and we will see the first file on the screen:

Switching Between Files

To switch from one file to the next,use this ex command:

To move back to the previous file use:

While we can move from one file to another,vi enforces a policy that prevents us from switching files if the current file has unsaved changes.To force vi to switch files and abandon your changes,add an exclamation(呼喊,惊叫) point(!) to the command.

In addition to the switching method described above,vim (and some version of vi) also provide some ex commands that make multiple files easier to manage.We can view a list of files being edited with the : buffers command.Doing so will display a list of the files at the bottom of the display:

To switch to another buffer(file),type :buffer followed by the number of the buffer you wish to edit.For example,to switch from buffer 1 which contains the file foo.txt to buffer 2 containing the file ls-output.txt we would type this:

and our screen now displays the second file.

Opening Additional Files For Editing

It's also possible to add files to our current editing session.The ex command :e(short for "edit") followed by a filename will open an additional file.Let's end our current editing session and return to the command line.

Start vi again with just one file:

To add our second file,enter:

And it should appear on the screen.The first file is still present as we can verify:

Note:You cannot switch to files loaded with the :e command using either the :n or :N command.To switch files,use the :buffer command followed by the buffer number.

Copying Content From One File Into Another

Often while editing multiple files,we will want to copy a portion(一部分,一份) of one file into another file that we are editing.This is easily done using the usual yank and paste commands we used earlier.We can demonstrate(说明) as follows.First,using our two files,switch to buffer 1(foo.txt) by entering:

which should give us this:

Next,move the cursor to the first line,and type yy to yank (copy) the line.

Switch to the second buffer by entering:

The screen will now contain some file listings like this (only a portion is shown here):

Move the cursor  to the first line and paste the line we copied from the preceding file by typing the p command:

Inserting An Entire File Into Another

It's also possible to insert an entire file into one that we are editing.To see this in action,let's end our vi session and start a new one with just a single file:

We will see our file listing again:

Move the cursor to the third line,then enter the following ex command:

The :r command (short for "read") inserts the specified file before the cursor position.Our screen should now look like this:

Saving Our Work

Like everything else in vi,there are several differet way to save our edited files.We have already covered the ex command:w,but there are some others we may also find helpful.

In command mode,typing ZZ will save the current file and exit vi.Likewise,the ex command:wq will combine the :w and :q commands into one that will both save the file and exit.

The :w command may also specify an optional filename.This acts like "Save As..."For example,if we were editing foo.txt and wanted to save an alternate version called foo1.txt,we would enter the following:

Note:While the command above saves the file under a new name,it does not change the name of the file you are editing.As you continue to edit,you will still be editing foo.txt,not foo1.txt.

转载于:https://www.cnblogs.com/itmeatball/p/7581534.html

vi profile相关推荐

  1. Linux的profile与bashrc的分析

    以后的开发中会设计到交叉编译器环境变量的设置,可以在以下几个文件中设置,所以这里简单分析下下面的几个文件. etc/profile: 此文件为系统的所有用户设置环境信息,当用户第一次登录时,该文件被执 ...

  2. ubuntu文本模式获得权限修改profile

    针对ubuntu14.04以下,越旧版本,旧的指令也有效. 进入登录页面,按shift+alt+F1进入root环境,验证用户名密码. 然后输入:cd /etc 进入etc文件 在输入:/usr/bi ...

  3. linux系统sudoers文件夹权限777以及/etc/profile文件修改后无法进入系统问题

    有位博友在我的另外一篇文章中留言,关于修改/etc文件夹权限为777导致/etc/sudoers文件夹权限修改为777后无法使用 "sudo"指令,关于这个问题打算与误操作/etc ...

  4. linux vi全屏编辑器

    linux系统中的FHS(Filesystem Hierarchy Standard)[文件系统的层次结构标准] /boot:与系统启动相关的文件(引导程序相关文件,内核) /dev:设备文件目录.设 ...

  5. 【Vi 编辑器进阶】

    今日学习目的: 理解 Vi 的三种运行模式及切换方法:学会使用 Vi 的各种操作命令进行文本文件的编辑. 1.在当前用户默认工作目录下新建一个名为"test"的目录指令:mkdir ...

  6. Linux下安装Java8

    Linux(ubuntu)下Java8安装 1.下载jdk8 这个看大家了,linux版本的就可以 2.创建jvm文件夹 在根目录下创建名为jvm的文件夹(在哪里创建看个人) $ sudo mkdir ...

  7. Go 学习笔记(1)— Ubuntu 系统 Go 环境搭建、VS Code 配置 Go 开发环境、VS Code 远程开发配置

    1. 安装说明 Ubuntu 下直接安装 Go 1.11 版本编译器时需要依赖 Go 1.4 版本.所以如果在使用 apt-get install go安装时参考以下链接安装:https://blog ...

  8. Linux服务器搭建常用环境(一)

    转载自:http://blog.163.com/hlz_2599/blog/static/142378474201341394955248/ 转载主要是怕链接失效,以后看不到了. 1.搭建telnet ...

  9. xp系统安装oracle乱码,linux中安装Oracle汉字乱码完整解决方案

    一. 安装JDK 在/tmp下建立一个临时的文件夹 # cd /tmp # mkdir javacn # cd javacn 从网上搜索下载j2sdk-1_4_2_02-linux-i586.bin并 ...

最新文章

  1. 【震惊】漱口水居然增加糖尿病,高血压发病率
  2. 确定多重选择列表控件 (List Control) 中的选定内容
  3. 从mysql读取数据保存成excel_小程序读取excel表格数据,并存储到云数据库
  4. xp上使用文件夹的共享和安全
  5. 牛客练习赛 63 F-牛牛的树行棋
  6. libevent源码深度剖析一
  7. scala 类中的对象是类_Scala中的类和对象
  8. 「代码随想录」精讲了18道力扣上贪心算法经典题目,总结了这些!
  9. 从想当亿万富翁到职场、创业、爱情、抑郁、学医学武,我的程序人生
  10. Linux内核数据结构之 radix tree
  11. win7字体_win7系统为桌面添加自己喜欢的文字作为桌面背景,学习一下
  12. 群晖文件管理系统使用教程
  13. 如何辨别中标麒麟和银河麒麟
  14. python电化学cv曲线怎么画_Maya创建NURBS曲线:CV曲线工具详解
  15. Oracle 参数文件(spfile和pfile)
  16. 计算机专业的具体能力和素质要求,计算机实验室管理员应具有的素质要求
  17. java感谢地说说_感恩心情说说
  18. 微信小程序_4,WXSS模板样式
  19. DIY可视化导出uni-app源码生成器
  20. WOL 微星 X570A-PRO 远程唤醒及远程桌面

热门文章

  1. Kafka 顺序消费方案
  2. Http持久连接与HttpClient连接池
  3. 基于CAP:深入剖析分布式一致性机制
  4. JDK中的坑:JDK中这些方法的bug你不要踩
  5. 阿里一面:如何保障消息100%投递成功、消息幂等性?
  6. 讨论:Service层需要接口吗?
  7. 没错,老板让我写个 BUG!
  8. 一条简单的更新语句,MySQL是如何加锁的?
  9. 面向对象的设计原则最终篇
  10. CVPR 2021:记一次神奇的 Rebuttal 经历