3、文本编辑方式
         PNEdit是一种支持多模式的文本编辑器,在不同编辑模式下操作行为有所不同,在对编辑的文本内容的选择会有多种选择方式,在做具体编辑操作时主要靠大量的快捷键命令操作来实现快速高效的文本编辑功能。
3.1、编辑模式
         PNEdit文本编辑器主要支持命令模式、输入模式和替换模式这3种不同的文本编辑方式。
         命令模式,在该模式下文本编辑窗口的可输入编辑状态是关闭的,对文本内容进行编辑时可以通过鼠标键、单个快捷键、多个快捷键组合和命令行输入编辑命令这4种方式进行快捷的文件内容编辑操作。下图23所示是在命令模式下实现的编辑操作,对正在编辑的内容从当前光标所在位置复制当前行以下的三行文本内容至剪切板中,该快捷命令执行的报告被打印在命令行窗口中。
图23 PNEdit命令编辑模式
         输入模式,在该模式下文本编辑窗口的可输入编辑状态是打开的,对文本内容进行编辑时可以通过字符直接输入、鼠标键、单个快捷键、多个快捷键组合和命令行输入编辑命令这5种方式进行快捷的文件内容编辑操作。下图24所示是在输入模式下实现的编辑操作,对正在编辑的内容从当前光标所在位置直接输入需要编辑的文本内容,在进入输入模式时命令窗口会打印”INSERT”。
图24 PNEdit输入编辑模式
         替换模式,在该模式下文本编辑窗口的可输入编辑状态是关闭的,对文本内容进行编辑时可以通过快捷键”r”和快捷键”R”这2种编辑内容替换操作方式,分别对应替换光标所在字符和替换光标至行尾所有字符(碰到<Esc>键则退出替换模式)。下图25所示是在替换模式下实现的编辑操作,对正在编辑的内容从当前光标所在位置至行尾做替换编辑操作,在进入替换模式时命令窗口会打印”REPLACE”。
图25 PNEdit替换编辑模式
3.2、文本选择
         PNEdit文本编辑器主要支持光标选择、字选择、行选择、段选择、全部选择和列选择这6种不同的文本内容选择模式。
         光标选择模式,在对文本内容进行选择时先通过鼠标左键点击一个位置(即为选择内容的起始点),然后鼠标左键按住不动移动至下一个位置(即为选择内容的结束点),释放鼠标左键则会高亮从起始点到结束点的文本内容,表示该部分内容已被选中。下图26所示是一个光标选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL”。
图26 PNEdit光标选择模式
         字选择模式,在对文本内容进行选择时用鼠标左键双击一个位置,释放鼠标左键则会高亮落在该位置上的字内容,表示该字内容已被选中(Edit菜单中的”Select”项下的”Word”子项和文本编辑窗口中的弹出式菜单中的”Select Word”项对应同样的功能)。下图27所示是一个字选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL”。
图27 PNEdit字选择模式
         行选择模式,在对文本内容进行选择时用鼠标左键三击一个位置,释放鼠标左键则会高亮落在该位置上的行内容,表示该行内容已被选中(Edit菜单中的”Select”项下的”Line”子项和文本编辑窗口中的弹出式菜单中的”Select Line”项对应同样的功能)。下图27所示是一个行选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL LINE”。
图28 PNEdit行选择模式
         段选择模式,点击Edit菜单中的”Select”项下的”Paragraph”子项或文本编辑窗口中的弹出式菜单中的”Select Paragraph”项,则会高亮落在当前光标所在位置上的段内容,表示该段内容已被选中。下图29所示是一个段选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL LINE”。
图29 PNEdit段选择模式
         全部选择模式,点击Edit菜单中的”Select”项下的”All”子项或文本编辑窗口中的弹出式菜单中的”Select All”项,则会高亮当前打开文件编辑窗口中的全部内容,表示该文本内容已被选中。下图30所示是一个全部选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL LINE”。
图30 PNEdit全部选择模式
         列选择模式,在进入列模式之后移动光标位置,在移动过程中即会实时高亮列选择的内容。列模式下选中的是一个块内容,块的起始和结束都有行和列两个坐标,分别对应进入列模式时光标所在位置的行列值和光标移动之后光标所在位置的行列值,落在这两个点内的块内容即为被选中的内容。下图31所示是一个列选择模式下选择编辑内容的操作,这部分文本内容在选中之后也会被复制至剪切板中,在该模式选择操作结束时命令窗口会打印”VISUAL BLOCK”。
图31 PNEdit列选择模式
3.3、快捷命令
         PNEdit文本编辑快捷命令有编辑选择、编辑输入、编辑更换、剪切复制粘贴、编辑参数、文件操作、光标移动、文本替换和列模式编辑这9种类型的快捷键命令。
         在文本编辑时可以使用快捷键对文本内容做选择,具体如下表2所示。
命令格式
功能
ggVG
选择全部文本内容。
Select all.
<double-mouse-left-click>
选择一个字的内容。当点击的位置在”[]””()””<>””{}”这些匹配对中时则会选择该匹配对包含的全部内容。那些由下划线连接的字母和数字字符被视为属于同一个字,可以通过双击鼠标左键进行选择,这里连续重复的非字母和非空白字符也将被选择,以及连续重复的空白字符也将被选择。
Select word. when click on []()<>{}, select contents inside matched pairs. Alphabetic and numeric characters joined by underlines are considered as one word and can be selected by double-clicking mouse left button. Continuously duplicated non-alphabetic and non-whitespace characters will be selected too. Continuously duplicated whitespace characters will be selected as well.
<triple-mouse-left-click>
选择一行内容。
Select one line.
表2 PNEdit编辑选择命令
        在文本编辑时可以使用快捷键将编辑窗口的可输入状态打开,将文本编辑窗口切换到输入模式。在输入模式下,键入的任何字符都被视为文本并添加到文件中。按Esc键退出输入模式。通过这些插入/替换命令可以撤消。当'autoindent'打开时,表示当前行的缩进将自动复制并应用于新行,具体如下表3所示。
命令格式
功能
a
在当前光标位置的后一个字符处设置编辑窗口的可附加文本内容状态。
Append text after the cursor.
A
在当前光标位置的行尾处设置编辑窗口的可附加文本内容状态。
Append text at the end of the line.
i
在当前光标位置的前一个字符处设置编辑窗口的可插入文本内容状态。
Insert text before the cursor.
I
在当前光标位置的行第一个非空白字符处设置编辑窗口的可插入文本内容状态。
Insert text before the first non-blank in the line.
o
在当前光标位置下方新起一行设置编辑窗口的可插入文本内容状态。
Begin a new line below the cursor and insert text.
O
在当前光标位置上方新起一行设置编辑窗口的可插入文本内容状态。
Begin a new line above the cursor and insert text.
表3 PNEdit编辑输入命令
        在文本编辑时可以使用快捷键对文本内容做出更换,通过这些命令插入/替换可以撤消。当'autoindent'打开时,当前行的缩进将被复制和应用自动转到新行,具体如下表4所示。
命令格式
功能
s
删除一个字符并设置编辑窗口的可插入文本内容状态。
Delete char and insert.
S
与命令“cc”相同。如果'autoindent'是打开的,保持缩进。
Same as command 'cc'. If 'autoindent' is on, preserve the indent.
r
替换一个字符,替换后保持命令模式。
Replace one character. Keep in command mode after replacing.
R
进入替换模式,对光标所在位置直至行尾内容做逐个字符输入替换,直至使用快捷键[Esc]返回命令模式。
Enter replace mode. [Esc] to get back to command mode.
cw
更换(替换)光标位置直至所在的字尾内容。
Change (replace) to the end of the word.
ciw
更换(替换)光标位置所在的整个字内容。
Change (replace) entire word.
cc
更换(替换)整行内容。如果'autoindent'是打开的,保持缩进。
Change (replace) entire line. If 'autoindent' is on, preserve the indent.
c$
更换(替换)光标所在位置直至行尾内容。
Change (replace) to the end of the line.
C
更换(替换)光标所在位置直至行尾内容。(c$功能相同)
Change (replace) to the end of the line. (same as c$).
<ctrl>h
在输入模式下光标退后并删除一个字符。
Used in input mode, back one character.
<ctrl>w
在输入模式下光标退后并删除一个字。
Used in input mode, back one word.
<ctrl>u
在输入模式下光标退后并删除至该行第一个非空白字符。
Used in input mode, back to the beginning of non-blank character.
[count] J
将当前行至第[count]行以空格间隔行合并成一行内容。如果没有[count]设置,则合并两行内容,在合并过程中行缩进会被删除,并在合并时将行内容之间插入一个空格。
Join [count] lines below to the current one with one space in between. with no [count] set, a minimum of two lines will be joined. Remove the indent and insert one space when joining.
[count] gJ
[count] J功能类似,只是在行合并时不会在行内容之间插入空格,也不会将行缩进删除。
Similar to [count] J, but don't insert any spaces or remove any indent.
u
撤销上次编辑过程。
Undo the last edit.
<ctrl>r
重做已撤消的更改。
Redo changes which were undone.
:changeb[uffer]
打开编辑过程缓冲窗口。
Open the change buffer window (GUI).
:change <change number in change buffer>
跳转至编辑过程缓冲中[change number]指向的列表编辑过程状态。
Go to a change listed in the change buffer.
<mouse-middle-click>
将剪贴板中存储的内容粘贴到当前光标处。该操作不会改变当前的命令/输入模式。
Paste from buffer *(clipboard). This does not change the command/input mode.
表4 PNEdit编辑更换命令
        在文本编辑时可以使用快捷键对文本内容做剪切、复制和粘贴等操作,具体如下表5所示。
命令格式
功能
x
删除一个字符并复制至通用缓冲区中。
Delete (Cut) a character to general buffer.
nx
删除n个字符并复制至通用缓冲区中。
Delete (Cut) n characters to general buffer.
X
向后删除一个字符并复制至通用缓冲区中。
Back (Cut) a character to general buffer.
nX
向后删除n个字符并复制至通用缓冲区中。
Back (Cut) n characters to general buffer.
dd
删除一行并复制至通用缓冲区中。
Delete (Cut) a whole line to general buffer.
ndd
删除n行并复制至通用缓冲区中。
Delete (Cut) n lines to general buffer.
dw
删除一个字(从当前光标起至该字尾处)并复制至通用缓冲区中。
Delete (Cut) word (counting from cursor) to general buffer.
dnw
删除n个字(第一个字为从当前光标起至该字尾处)并复制至通用缓冲区中。
Delete (Cut) n words (counting from cursor) to general buffer.
d)
删除当前光标位置至该段结束。
Delete (Cut) to the end of sentence.
db
删除前一个字(从当前光标起至该字首处)并复制至通用缓冲区中。
Delete (Cut) previous word to general buffer.
dnb
删除前n个字(第一个字为从当前光标起至该字首处)并复制至通用缓冲区中。
Delete (Cut) previous n words to general buffer.
D
删除当前光标至行尾内容并复制至通用缓冲区中。
Delete (Cut) to the end of the line to general buffer.
d$
删除当前光标至行尾内容并复制至通用缓冲区中。
Delete (Cut) to the end of the line to general buffer.
"*ndd
删除n行内容并复制至* 缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
Delete (cut) n lines to buffer *. Buffer * is the special buffer for storing the selection.
"[a-z]ndd
删除n行内容并存储至[a-z]有名缓冲区中。
Delete (cut) n lines to buffer [a-z].
"[A-Z]ndd
删除n行内容并附加至[a-z]有名缓冲区中。
Delete (cut) n lines and append to buffer [a-z].
y
复制光标选择的内容存储至通用缓冲区中。
Yank (copy) the selected chars to general buffer.
yy
复制一行内容存储至通用缓冲区中。
Yank (copy) a line to general buffer.
Y
复制一行内容存储至通用缓冲区中。
Yank (copy) a line to general buffer.
nyy
复制n行内容存储至通用缓冲区中。
Yank (copy) n lines to general buffer.
nY
复制n行内容存储至通用缓冲区中。
Yank (copy) n lines to general buffer.
yw
复制一个字内容存储至通用缓冲区中。
Yank (copy) a word to general buffer.
ynw
复制n个字内容存储至通用缓冲区中。
Yank (copy) n words to general buffer.
"*nyy
复制n行内容存储至*缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
Yank (copy) n lines to buffer *. Buffer * is the special buffer for storing the selection.
"[a-z]nyy
复制n行内容存储至[a-z]有名缓冲区中。
Yank (copy) n lines to buffer [a-z].
"[A-Z]nyy
复制n行内容附加至[a-z]有名缓冲区中。
Yank (copy) n lines and append to buffer [a-z].
"[a-z]nY
复制n行内容存储至[a-z]有名缓冲区中。
Yank (copy) n lines to buffer [a-z].
"[A-Z]nY
复制n行内容附加至[a-z]有名缓冲区中。
Yank (copy) n lines and append to buffer [a-z].
"*nY
复制n行内容存储至*缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
Yank (copy) n lines to buffer *. Buffer * is the special buffer for storing the selection.
p
将通用缓冲区中的内容粘贴至光标之后。
Put (paste) general buffer after cursor.
"*p
*缓冲区中的内容粘贴至光标之后,该缓冲是用于存储选择内容的特殊缓冲区。
Put (paste) text from buffer * after cursor. Buffer * is the special buffer for storing the selection.
"[a-z]p
[a-z]有名缓冲区中的内容粘贴至光标之后。
Put (paste) text from buffer [a-z] after cursor.
P
将通用缓冲区中的内容粘贴至光标之前。
Put (paste) general buffer before cursor.
"*P
*缓冲区中的内容粘贴至光标之前,该缓冲是用于存储选择内容的特殊缓冲区。
Put (paste) text from buffer * before cursor. Buffer * is the special buffer for storing the selection.
"[a-z]P
[a-z]有名缓冲区中的内容粘贴至光标之前。
Put (paste) text from buffer [a-z] before cursor.
np
将通用缓冲区中的内容重复n次粘贴至光标之后。
Put (paste) general buffer after cursor by n times.
"*np
*缓冲区中的内容重复n次粘贴至光标之后,该缓冲是用于存储选择内容的特殊缓冲区。
Put (paste) text from buffer * after cursor by n times. Buffer * is the special buffer for storing the selection.
"[a-z]np
[a-z]有名缓冲区中的内容重复n次粘贴至光标之后。
Put (paste) text from buffer [a-z] after cursor by n times.
nP
将通用缓冲区中的内容重复n次粘贴至光标之前。
Put (paste) general buffer before cursor by n times.
"*nP
*缓冲区中的内容重复n次粘贴至光标之前,该缓冲是用于存储选择内容的特殊缓冲区。
Put (paste) text from buffer * before cursor by n times. Buffer * is the special buffer for storing the selection.
"[a-z]nP
[a-z]有名缓冲区中的内容重复n次粘贴至光标之前。
Put (paste) text from buffer [a-z] before cursor by n times.
:stringb[uffer]
打开字符缓冲窗口,在该窗口中可以现实和修改包括剪贴板在内的所有字符缓冲中的内容。
Open the string buffer window (GUI) to display the contents of all string buffers, clipboard included.
表5 PNEdit剪切复制粘贴命令
        在文本编辑时可以使用命令设置文本内容编辑时的一些常用参数,具体如下表6所示。
命令格式
功能
:se[t] number
在每行文字前显示行号。
Display a line number in front of every line.
:se[t] nonumber
在每行文字前不显示行号。
Switch off ':set number', not display line number any more.
:se[t] list
显示不可见字符。
Show invisible characters.
:se[t] nolist
不显示不可见字符。
Not show invisible characters.
:se[t] autoindent
新起行的缩进功能,即将当前行首作为新行的起始输入光标位置。
Automatically copy indent from current line when starting a new line.
:se[t] noautoindent
关闭新起行的缩进功能。
Turn off auto indent.
:se[t] wrap
超过窗口宽度的行将换行,并在下一行继续显示。
Lines longer than the width of the window will wrap and displaying continues on the next line.
:se[t] nowrap
超过窗口宽度的行不换行,只显示窗口宽度的行内容,未显示的部分需要用窗口中的宽度滚动条查看。
Lines will not wrap and only part of long lines will be displayed.
表6 PNEdit编辑参数命令
        在文本编辑时可以使用输入命令在文本编辑窗口中直接打开文件,以及在编辑的内容中选择文件打开,这里可以设置相对路径搜索文件,具体如下表7所示。
命令格式
功能
:se[t] path=<path1>[,<path2>,...]
设置搜索路径列表。搜索路径是在文件相关命令中使用相对路径时将搜索的目录列表。多条路径之间用逗号分隔,路径在列表中的顺序决定了搜索优先级。默认搜索路径是pnfile树的主路径。当前路径的引用是$path
Set search path list. Search path is a list of directories which will be searched when using relative paths in the file related commands. Multiple paths should be separated by comma, the order of the paths in the list determines the search priority. Default search path is the home path of the pnfile tree. The reference to the current path is $path.
:se[t] path+=<path1>[,<path2>,...]
附加路径至搜索路径列表。
Append paths to the search path list.
:se[t] path-=<path1>[,<path2>,...]
从搜索路径列表中移除路径。
Remove paths from the search path list.
:path
    打印列表中的所有搜索路径。
    List the search paths.
    :homepath
    打印pnfile树的主路径。
    Print the home path of the pnfile tree.
    :r[ead] [file]
    [file] (默认:当前文件)文件内容插入至当前光标之后,该操作可撤销。
    Insert the [file] (default: current file) below the cursor. can be undone.
    gf
    找到光标所在的文件名在当前窗口打开并开始编辑,或者找到光标所在的目录在当前窗口打开并浏览该目录。如果编辑器拒绝放弃当前文件,则此命令失败。
    Find the file name the cursor is on and edit it, or find the directory the cursor is on and browse it. This command fails if the Editor refuses to abandon the current file.
    <ctrl>wgf
    和gf功能类似,但是在新的tab窗口中打开。
    Similar to gf, but open in a new tab.
    <ctrl>6
    在最新打开的两个文件之间快速来回跳转。
    Quickly jump back and forth between the latest opened two files.
    :E[xplore] [directory]
    找到目录并浏览它,:E不带参数打开当前文件所在的目录。如果当前文件已编辑但未保存,则此操作将失败。
    Find the directory and browse it, :E with no argument opens the directory where the current file locates. This fails if the current file is edited but not saved.
    :E[xplore]! [directory]
    :E[xplore] [directory]功能类似,但放弃任何更改。
    Same as :E[xplore] [directory], but discard any changes.
    :e[dit] [file/directory]
    找到文件并编辑它,或者找到目录并浏览它。如果当前文件已编辑但未保存,则此操作将失败。
    Find the file and edit it, or find the directory and browse it. this fails if the current file is edited but not saved.
    :e[dit]! [file/directory]
    :e[dit] [file/directory] 功能类似,但放弃任何更改。
    Same as :e[dit] [file/directory], but discard any changes.
    :ene[w]
    编辑一个新的未命名缓冲区。当对当前缓冲区进行了更改但未保存时,此操作将失败。
    Edit a new, unnamed buffer. This fails when changes have been made to the current buffer but not saved.
    :ene[w]!
    编辑一个新的未命名缓冲区。丢弃对当前缓冲区的任何更改。
    Edit a new, unnamed buffer.  Discard any changes to the current buffer.
    :tabnew [file]
    在一个新的tab窗口中打开[file]文件内容。当[file]中没有参数时,则仅打开一个新的空白tab窗口。
    Open [file] in new tab. When with no argument, open a new blank tab.
    :sp[lit] [file]
    将当前窗口横向等比例分割,并在分割窗口中打开(默认当前文件)文件。
    Split current window in two. open (default current file) file in the split window.
    <ctrl>ws
    将当前窗口横向等比例分割,并在分割窗口中打开当前文件。
    Split current window in two.
    :vs[plit] [file]
    和:sp[lit] [file]功能类似,只是纵向等比例分割编辑窗口。
    Like ':split', but split vertically.
    <ctrl>wv
    将当前窗口纵向等比例分割,并在分割窗口中打开当前文件。
    Vertically split current window in two.
    :sav[eas] <file>
    将当前编辑窗口中的内容存储至一个新的文件中。
    Save the file under a new name.
    :q[uit]
    退出当前窗口。当该窗口中内容有更改但未保存文件时,此操作将失败。
    Quit the current window. This fails when changes have been made but not saved.
    :q[uit]!
    退出当前窗口。放弃更改的内容并退出。
    Discard any changes and quit.
    :w[rite] [file]
    保存至当前文件,或保存至新文件名中。当文件为只读或指定的[file]存在时写入失败。
    Save the file in-place, or under a new name. Writing fails when the file is read-only or when the specified [file] exists.
    :w[rite]! [file]
    保存至当前文件,或保存至新文件名中。
    Save the file in-place, or under a new name.
    :wq [file]
    保存至当前文件,或保存至新文件名中,然后退出。当文件是只读时写入失败。当进行了更改但未保存时,退出将失败。
    Save the file in-place, or under a new name, and then exit. Writing fails when the file is read-only. Exiting fails when changes have been made but not saved.
    :wq! [file]
    保存至当前文件,或保存至新文件名中,然后退出。
    Save the file in-place, or under a new name, and then quit.
    :qa[ll]
    退出所有tab窗口。当进行了更改但未保存时,此操作将失败。
    Quit all tabs. This fails when changes have been made but not saved.
    :qa[ll]!
    退出所有tab窗口。放弃更改的内容并退出。
    Discard any changes and quit all tabs.
    :wqa[ll]
    写入(保存)和退出所有tab窗口。当文件是只读时写入失败。当进行了更改但未保存时,退出将失败。
    Write (save) and quit on all tabs. Writing fails when the file is read-only. Exiting fails when changes have been made but not saved.
    :wqa[ll]!
    写入(保存)和退出所有tab窗口。
    Write (save) and quit on all tabs.
    :wa[ll]
    写入(保存)所有tab窗口。当文件是只读时写入失败。
    Write (save) on all tabs. Writing fails when the file is read-only.
    :wa[ll]!
    写入(保存)所有tab窗口。
    Write (save) on all tabs.
    ZZ
    和:wq功能相同。
    Same as ':wq'.
    ZQ
    和:q功能相同。
    Same as ':q!'.
    :f[ile]
    显示当前文件信息。
    Display current file information.
    <ctrl>g
    显示当前文件信息。
    Display current file information.
    g<ctrl>g
    显示当前光标信息。
    Display current cursor information.
    :fileb[uffer]
    打开文件缓冲窗口。
    Open the file buffer window (GUI).
    :h[elp]
    打开编辑命令查询窗口。
    Finding the help documents.
    表7 PNEdit文件操作命令
            在文本编辑时可以使用快捷键在打开的文本内容中做光标和窗口的跳转,具体如下表8所示。
    命令格式
    功能
    H
    光标移至当前编辑窗口屏的的起始行首位置。
    Move to upper left corner of current screen.
    M
    光标移至当前编辑窗口屏的的中间行首位置。
    Move to middle left of current screen.
    L
    光标移至当前编辑窗口屏的的结尾行首位置。
    Move to last left of current screen.
    w
    光标移前进移动一个字并将光标落在字首位置。
    Move forward one word.
    b
    光标移后退移动一个字并将光标落在字首位置。
    Move backward to the start of the previous one word.
    e
    光标移前进移动一个字并将光标落在字尾位置。
    Move to the next end of one word.
    ge
    光标移后退移动一个字并将光标落在字尾位置。
    Move to the previous end of one word.
    k
    光标向上移动一行位置。
    Move one line up.
    j
    光标向下移动一行位置。
    Move one line down.
    h
    光标向左移动一个字符位置。
    Move one char left.
    l
    光标向右移动一个字符位置。
    Move one char right.
    gg
    光标移至文件起始行首的位置。
    Go to the start of a file.
    G
    光标移至文件结尾行首的位置。
    Positions you at the end of the file.
    nG
    光标跳转至第n行的行首位置。
    Go to the start of the line n.
    :[lineno]
    光标跳转至第[lineno]行的行首位置。
    Go to the start of line [lineno].
    $
    光标移至当前行的行尾位置。
    Move to the end of a line.
    <End>
    光标移至当前行的行尾位置。
    Does the same thing as '$' command.
    ^
    光标移至当前行的第一个非空白字符位置。
    Move to the first non-blank character of the line.
    0
    光标移至当前行的行首位置。
    Move to the very first character of the line.
    <Home>
    光标移至当前行的行首位置。
    Move to the very first character of the line.
    %
    光标在[], {}, <>, ()这些符号前后匹配之间跳转。
    Go to the nesxt matched [], {}, <>, ().
    f[char]
    光标移至当前光标位置之后当前行中第一个匹配[char]的位置。如果当前光标位置正好匹配上[char]则光标不移动。
    Move to the next [char] of current line. If the cursor is on the [char], will not move.
    ;
    重复上一次” f[char]”操作,光标依次跳转至当前行中下一个匹配[char]的位置。
    Repeat the last 'f[char]', but move forward if the cursor is on the current [char].
    <ctrl>u
    光标向上移动半个屏的内容。
    Scroll down half a screen of text.
    <ctrl>d
    光标向下移动半个屏的内容。
    Move the viewing window down half a screen in the file, thus scrolls the text up half a screen.
    <ctrl>f
    光标向下移动一个屏的内容。
    Scroll forward by a whole screen.
    <ctrl>b
    光标向上移动一个屏的内容。
    Scroll backward by a whole screen.
    <ctrl>l
    当前屏内容重新刷新显示。
    Redraw current screen.
    z<CR>
    将当前行置于屏首并将光标移至该行的第一个非空白符的位置。
    Make the current line the top of the window and move the cursor to the first non-blank charactor.
    z.
    将当前行置于屏中并将光标移至该行的第一个非空白符的位置。
    Make the current line the middle of the window and move the cursor to the first non-blank charactor.
    z-
    将当前行置于屏尾并将光标移至该行的第一个非空白符的位置。
    Make the current line the bottom of the window and move the cursor to the first non-blank charactor.
    /{pattern}/[flags]
    向前搜索关键字并将光标移至当前屏自上而下第一个匹配的位置,在该命令行尾可加关键字搜索规则标志”i””m””s””r”。这里”i”表示不区分大小写、”m”表示支持跨行匹配、”s”表示用”.”这个字符做通配符、”r”表示全字符匹配。
    Search forward and move to next occurrence of {pattern}, flags can be combination of 'i', 'm', 's', 'r'. 'i'ignore case), 'm'multi-line), 's'dot matches all), 'r'raw data matching).
    ?{pattern}?[flags]
    向后搜索关键字并将光标移至当前屏自下而上第一个匹配的位置,在该命令行尾可加关键字搜索规则标志”i””m””s””r”。这里”i”表示不区分大小写、”m”表示支持跨行匹配、”s”表示用”.”这个字符做通配符、”r”表示全字符匹配。
    Search backward and move to next occurrence of {pattern}, flags can be combination of 'i', 'm', 's', 'r'. 'i'ignore case), 'm'multi-line), 's'dot matches all), 'r'raw data matching).
    <shft><mouse-left-click>
    将当前光标所在位置对应的字作为关键字向前搜索并将光标移至匹配到的下一个字的字首位置。
    Search forward and move to next occurrence of the word where the cursor is on.
    #
    将当前光标所在位置对应的字作为关键字向后搜索并将光标移至匹配到的下一个字的字首位置。
    Search backward and move to next occurrence of the word where the cursor is on.
    *
    将当前光标所在位置对应的字作为关键字向前搜索并将光标移至匹配到的下一个字的字首位置。
    Search forward and move to next occurrence of the word where the cursor is on.
    n
    重复上一次的搜索操作。
    Repeat the last search.
    N
    反向重复上一次的搜索操作。
    Repeat the last search reversely.
    表8 PNEdit光标移动命令
            在文本编辑时可以使用快捷键对文本内容做替换,搜索并替换整个文件或部分文件,[range]在这里可以是以下几种方式:1)、.:  当前行;2)、n: 第n行;3)、 .+n: 当前行加n行;4)、 $: 最后一行;5)、 m,n: 从第m行到第n行;6)、'<,'>: 选中的文本;在列模式下,搜索和替换只应用于所选的列内容。没有使用[range]的其替换仅在当前行和.'一样。具体如下表9所示。
    命令格式
    功能
    :%s/[regex_old]/[regex_new]/[flags]
    在整个文件中做关键字的替换。在该命令行尾可加关键字搜索替换规则标志”i””m””s””r”。这里”i”表示不区分大小写、”m”表示支持跨行匹配、”s”表示用”.”这个字符做通配符、”r”表示全字符匹配。
    Replace old with new throughout file. flags can be combination of 'i', 'm', 's', 'r'. 'i'ignore case), 'm'multi-line), 's':(dot matches all), 'r':(raw data matching).
    :[range]s/[regex_old]/[regex_new]/[flags]
    在文件的一个范围内做关键字的替换。在该命令行尾可加关键字搜索替换规则标志”i””m””s””r”。这里”i”表示不区分大小写、”m”表示支持跨行匹配、”s”表示用”.”这个字符做通配符、”r”表示全字符匹配。
    Replace old with new in line [range]. flags can be combination of 'i', 'm', 's', 'r'. 'i':(ignore case), 'm':(multi-line), 's':(dot matches all), 'r':(raw data matching).
    表9 PNEdit文本替换命令
            在文本编辑时可以使用快捷键对文本列的内容做编辑操作,其操作方式是垂直执行的,执行的命令也是可以撤消的,具体如下表10所示。
    命令格式
    功能
    <ctrl>v
    开始进入列模式。
    Start column mode.
    k
    在列模式中控制选择的块内容向上移动一行。
    In column mode, move one line up to select block.
    j
    在列模式中控制选择的块内容向下移动一行。
    In column mode, move one line down to select block.
    h
    在列模式中控制选择的块内容向左移动一个字符。
    In column mode, move one char left to select block.
    l
    在列模式中控制选择的快内容向下移动一行。
    In column mode, move one char right to select block.
    I
    在列模式中进入列字符插入模式。
    In column mode, insert characters.
    s
    在列模式中删除块选择的内容将其存入通用缓冲区中并同时进入列字符插入模式。
    In column mode, cut to general buffer and insert.
    d
    在列模式中删除块选择的内容将其存入通用缓冲区中。
    In column mode, delete (cut) to the general buffer.
    x
    在列模式中删除块选择的内容将其存入通用缓冲区中。
    In column mode, delete (cut) to the general buffer.
    y
    在列模式中复制块选择的内容将其存入通用缓冲区中。
    In column mode, yank (copy) to the general buffer.
    p
    在列模式中将通用缓冲区中的内容插入在当前光标之后。
    In column mode, put general buffer after cursor.
    P
    在列模式中将通用缓冲区中的内容插入在当前光标之前。
    In column mode, put general buffer before cursor.
    np
    在列模式中将通用缓冲区中的内容在当前光标之后插入n次。
    In column mode, put general buffer after cursor by n times.
    nP
    在列模式中将通用缓冲区中的内容在当前光标之前插入n次。
    In column mode, put general buffer before cursor by n times.
    J
    在列模式中将块选中的行内容合并。在做合并时其每个合并行之间中加一个空格间隔开。
    In column mode, join all involved lines together. Remove the indent and insert one space when joining.
    gJ
    在列模式中将块选中的行内容合并。在做合并时其每个合并行之间中无空格做间隔。
    In column mode, similar to J, but don't insert any spaces or remove any indent.
    表10 PNEdit列模式编辑命令
    4、编辑应用工具
             PNEdit平台中集成了目录浏览界面、高级编辑工具、高级搜索工具、编辑状态缓冲、编辑字符缓冲、编辑文件缓冲和编辑内容标记这7个应用工具。其中目录浏览界面是在文本编辑窗口中打开一个文件夹即会打开该界面,其余6个应用工具可以通过菜单栏Edit中的”Advanced Edit”和”Advanced Search Replace”以及菜单栏Buffers中的”Change Buffer”、”String Buffer”、”File Buffer”和”Tagging”,按钮项Edit中的、按钮项Search中的、按钮项Buffers中的分别打开对应的应用工具。
    4.1、目录浏览界面
             下图32所示是一个打开的目录浏览界面,该窗口中的第1行至6行为目录浏览界面固定显示的头部分,第3行显示当前打开的目录路径为”/home/test/test_case/script/split_join”,第4行显示打开的目录结构按大小排序,第5行列出了快捷操作目录浏览界面的方式(快捷键<F1>或输入编辑命令”:help”对应打开编辑命令帮助窗口、快捷键”-”对应回退到上一层目录、快捷键”D”对应删除目录、快捷键”R”对应重命名目录、快捷键”s”对应变换不同排序方式(按文件大小、文件名和文件更新时间依次切换))。第7行至目录列表结尾是目录浏览界面的正文部分,其每一行都可以用上下键逐行跳转或用鼠标左键点击直接跳转,第7行可回车键会退上一层目录,第8行至13行可回车键进入对应文件夹下一层目录,第14行至目录列表结尾可回车键打开对应的文件内容。
    图32 PNEdit目录浏览界面
    4.2、高级编辑工具
             下图33所示为高级编辑工具界面,其中Position栏用于显示当前选择编辑的内容,Operation栏用于控制对于选择部分内容的编辑操作。在Position栏中有行模式”Line Mode”和列模式”Column Mode”这两种编辑选择模式,”From”和”To”后的输入框对应输入选择的起始和结束点坐标位置,全部选择”All”、选择当前行”Current Line”和选择文本窗口选择的内容”Smart”这三种常用的选择方式,按钮”Highlight”点击高亮输入的选择的内容。在Operation栏中的按钮”Cut”、”Copy”、”Join”和”Paste”分别对应将选择编辑部分的内容做剪切、复制、合并、粘贴(在粘贴按钮后的输入框对应输入粘贴的坐标位置)操作,Column Mode Only栏为仅支持列模式的操作,在该栏中的按钮”Insert”和”Change”分别对应在列模式下的插入和更换操作,在按钮后的输入框对应输入需要插入和更换的内容。
    图33 PNEdit高级编辑工具
    4.3、高级搜索工具
             下图34所示为高级搜索工具界面,其中Position栏用于显示当前选择搜索的内容,Expression栏用于选择搜索的匹配模式以及搜索和替换操作的关键字内容。在Position栏中有行模式”Line Mode”和列模式”Column Mode”这两种搜索选择模式,”From”和”To”后的输入框对应输入选择的起始和结束点坐标位置,全部选择”All”、选择当前行”Current Line”和选择文本窗口选择的内容”Smart”这三种常用的选择方式。在Expression栏中有”Normal”和”Regex” 这两种模式,在”Normal”模式中有”Ignore Case”和”Whole Word”这两个勾选项分别对应不区分大小写和完整字匹配,在”Regex”模式中有”I”、“M”、”S”和”R”这4个勾选项分别对应不区分大小写、跨行匹配、点字符通配、字符区分,”Search”和”Replace”后的输入框分别对应输入搜索和替换操作的关键字内容。按钮”Search”、”Prev”和”Next”分别对应根据设置的搜索条件开始搜索操作、跳转前一个搜索匹配项、跳转后一个搜索匹配项,按钮”Replace All”、”Replace Next”分别对应根据设置的搜索和替换条件开始全部替换操作、逐个替换操作。
    图34 PNEdit高级搜索工具
    4.4、编辑过程缓冲
             下图35所示为编辑过程缓冲界面,在该缓冲窗口中显示了当前文本窗口的编辑过程状态列表,该列表中有”Number”、”Saved”、”Update Time”、”Position”和”Information”这5列分别对应编辑过程编号、编辑过程存文件状态、编辑过程更新时间、编辑过程坐标位置、编辑过程文本信息,在该列表中鼠标靠近某项时会有一个浮动窗口显示该项的编辑过程状态的详细信息,鼠标左键单击某项时会高亮当前项,鼠标左键双击某项时会在文本窗口中跳转至该项对应的编辑过程。按钮”Undo”、”Redo”分别对应回退上一个编辑过程状态、前进下一个编辑过程状态,按钮”Goto”、”Clear”分别对应跳转至列表中选中项的编辑过程状态、清除当前编辑过程状态记录的整个缓冲项。
    图35 PNEdit编辑过程缓冲
    4.5、编辑字符缓冲
            编辑字符缓冲用于存储编辑过程中所需要的字符,一个完整的字符缓冲区有三种类型,分别为一个通用缓冲区,10个剪贴板缓冲区和26个有名缓冲区。存储在每个编辑缓冲区中的所有字符都可以在编辑字符缓冲窗口中查看和编辑。PNEdit工具打开之后都有一个专用的字符缓冲区集,在该PNEdit窗口下所有的文本编辑窗口共享相同的字符缓冲区。
             下图36所示为编辑字符缓冲中对应的通用缓冲区,图中文本框中显示了当前存储在该缓冲区中的字符内容,存储在缓冲区中内容大多是由编辑更换命令操作的字符。下面列出了更新通用缓冲区的命令,在执行这些命令时删除或复制的字符串将会更新该缓冲区中的内容。
    s: 删除一个字符并设置编辑窗口的可插入文本内容状态。
    S: 与命令“cc”相同。如果'autoindent'是打开的,保持缩进。
    cw: 更换(替换)光标位置直至所在的字尾内容。
    ciw: 更换(替换)光标位置所在的整个字内容。
    cc: 更换(替换)整行内容。如果'autoindent'是打开的,保持缩进。
    c$: 更换(替换)光标所在位置直至行尾内容。
    C: 更换(替换)光标所在位置直至行尾内容。(和c$功能相同)
    x: 删除一个字符并复制至通用缓冲区中。
    nx: 删除n个字符并复制至通用缓冲区中。
    X: 向后删除一个字符并复制至通用缓冲区中。
    nX: 向后删除n个字符并复制至通用缓冲区中。
    dd: 删除一行并复制至通用缓冲区中。
    ndd: 删除n行并复制至通用缓冲区中。
    dw: 删除一个字(从当前光标起至该字尾处)并复制至通用缓冲区中。
    dnw: 删除n个字(第一个字为从当前光标起至该字尾处)并复制至通用缓冲区中。
    d): 删除当前光标位置至该段结束。
    db: 删除前一个字(从当前光标起至该字首处)并复制至通用缓冲区中。
    dnb: 删除前n个字(第一个字为从当前光标起至该字首处)并复制至通用缓冲区中。
    D: 删除当前光标至行尾内容并复制至通用缓冲区中。
    d$: 删除当前光标至行尾内容并复制至通用缓冲区中。
    y: 复制光标选择的内容存储至通用缓冲区中。
    yy: 复制一行内容存储至通用缓冲区中。
    Y: 复制一行内容存储至通用缓冲区中。
    nyy: 复制n行内容存储至通用缓冲区中。
    nY: 复制n行内容存储至通用缓冲区中。
    yw: 复制一个字内容存储至通用缓冲区中。
    ynw: 复制n个字内容存储至通用缓冲区中。
    s: 在列模式中删除块选择的内容将其存入通用缓冲区中并同时进入列字符插入模式。
    d: 在列模式中删除块选择的内容将其存入通用缓冲区中。
    x: 在列模式中删除块选择的内容将其存入通用缓冲区中。
    y: 在列模式中复制块选择的内容将其存入通用缓冲区中。
    图36 PNEdit编辑字符通用缓冲区
             下图37所示为编辑字符缓冲中对应的剪切板缓冲区,这里最多有十个剪贴板缓冲区可用,由一个下拉列表记录最近的十个选择历史。在PNEdit工具中的文本编辑窗口中,用户可以通过点击鼠标中键粘贴最新(顶部)剪切板缓冲区的内容,类似地,用户也可以将其粘贴到另一个应用程序中。在剪贴板缓冲区列表后有一个Top按钮,它可以更改列表的顺序并使任何可用的剪切板缓冲区位于顶部,这里按钮Top的操作只有在点击按钮Save之后才会生效。最新的(顶部)剪切板缓冲区也可以通过特殊的寄存器”*”来访问,例如,在命令模式下,命令"*y复制一行,创建一个新的剪切板板缓冲区作为最新的一行,并将复制的一行存储到最新的剪切板缓冲区,类似地,”*p”命令粘贴最新剪切板缓冲区的内容。图中文本框中显示了当前存储在最新的9号剪切板缓冲区的字符内容,下面列出了操作剪切板缓冲区的相关命令。
    "*ndd: 删除n行内容并复制至* 缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
    "*nyy: 复制n行内容存储至*缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
    "*nY: 复制n行内容存储至*缓冲区中,该缓冲是用于存储选择内容的特殊缓冲区。
    "*p: 将*缓冲区中的内容粘贴至光标之后,该缓冲是用于存储选择内容的特殊缓冲区。
    "*P: 将*缓冲区中的内容粘贴至光标之前,该缓冲是用于存储选择内容的特殊缓冲区。
    "*np: 将*缓冲区中的内容重复n次粘贴至光标之后,该缓冲是用于存储选择内容的特殊缓冲区。
    "*nP: 将*缓冲区中的内容重复n次粘贴至光标之前,该缓冲是用于存储选择内容的特殊缓冲区。
    图37 PNEdit编辑字符剪切板缓冲区
             下图38所示为编辑字符缓冲中对应的有名缓冲区,这里有26个名称为a - z的有名缓冲区可供使用,这些缓冲区中的内容可以通过命令中引用”a”到”z”相关的任何复制、删除、剪切、附加或粘贴命令来访问,例如,在命令模式下,命令"ay表示复制一行并存储到A有名缓冲区中,命令"Ay表示复制一行并附加到A有名缓冲区中,类似地,命令"bp表示在光标前粘贴B有名缓冲区中的内容。
             在PNEdit工具打开时是没有为任何有名缓冲区的预留空间的,用户通过删除或复制命令将一些内容存储到任何有名缓冲区中,这个特定的有名缓冲区的空间才会被开启并在已使用的下拉列表中记录该有名缓冲区,在该列表后的按钮Delete点击可以将列表中选中的有名缓冲区删除,同时,也可以通过按钮New创建一个新的未被占用的有名缓冲区,该按钮后的下拉列表中记录了当前未被使用的有名缓冲区,这里按钮Delete和按钮New的操作只有在点击按钮Save之后才会生效。图中文本框中显示了当前存储在A有名缓冲区的字符内容,下面列出了访问有名缓冲区的命令。
    " [a-z]ndd: 删除n行内容并存储至[a-z]有名缓冲区中。
    " [A-Z]ndd: 删除n行内容并附加至[a-z]有名缓冲区中。
    " [a-z]nyy: 复制n行内容存储至[a-z]有名缓冲区中。
    " [A-Z]nyy: 复制n行内容附加至[a-z]有名缓冲区中。
    " [a-z]nY: 复制n行内容存储至[a-z]有名缓冲区中。
    " [A-Z]nY: 复制n行内容附加至[a-z]有名缓冲区中。
    " [a-z]p: 将[a-z]有名缓冲区中的内容粘贴至光标之后。
    " [a-z]P: 将[a-z]有名缓冲区中的内容粘贴至光标之前。
    " [a-z]np: 将[a-z]有名缓冲区中的内容重复n次粘贴至光标之后。
    " [a-z]nP: 将[a-z]有名缓冲区中的内容重复n次粘贴至光标之前。
    图38 PNEdit编辑字符有名缓冲区
             下图39所示为对编辑字符缓冲中的三种类型缓冲区可以分别做编辑、保存和读取操作,可以通过点击窗口中的按钮Edit来修改所选缓冲区中的内容,在点击按钮Save保存之后即可通过编辑命令中的读取命令来获取更新之后的内容。除了可以修改缓冲区中的内容之外,编辑的插入模式也可以在该编辑字符缓冲窗口中修改,通用和剪切板缓冲区支持光标模式、行模式和列模式这3种插入模式,对于有名缓冲区仅支持前两种插入模式。在光标模式下插入的内容会被放在当前文本窗口中当前光标所在位置之后,在行模式下将会从当前光标所在行的以下行中插入内容。在列模式插入时会将选定的有名缓冲区中的内容视为按列模式插入并将垂直插入光标所在位置的文本中。在该窗口右下角的按钮Reset点击将取消当前的修改并恢复至在编辑字符缓冲窗口打开之前的所有缓冲区的内容和插入模式。
    图39 PNEdit编辑字符缓冲内容编辑
    4.6、编辑文件缓冲
             下图40所示为编辑文件缓冲界面,在该缓冲窗口中显示了当前所有文本窗口中打开过的文件列表,该列表中有”File Name”、”File Size”、”Update Time”和”File Path”这4列分别对应打开过的文件名、文件的大小、文件的更新时间、文件所在的文件夹全路径,在该列表中鼠标靠近某项时会有一个浮动窗口显示该项的编辑文件的详细信息,鼠标左键单击某项时会高亮当前项,鼠标左键双击某项时会在当前文本窗口中新打开该项对应存储在缓冲区中的文件内容。按钮”Refresh”、”Delete”分别更新该缓冲区中的文件列表、从缓冲区中删除列表中选中项对应的文件,按钮”Open”、”Open Tab”分别对应在当前文本窗口中新打开列表选中项对应存储在缓冲区中的文件内容、新打开一个tab窗口并打开列表选中项对应存储在缓冲区中的文件内容。
    图40 PNEdit编辑文件缓冲
    4.7、编辑内容标记
             下图41所示为编辑编辑内容标记界面,被选择标记的内容在文本窗口中被高亮显示。高亮显示的部分会被记录在标记列表中,在列表窗口中显示了当前文本窗口中所有做了标记的列表,该列表中有”Line”、”Content”这两列分别标记内容的起始和结束行号、标记内容的起始和结束行内容,在该列表中鼠标靠近某项时会有一个浮动窗口显示该项标记的详细信息,鼠标左键单击某项时会高亮当前项,鼠标左键双击某项时光标会跳转至当前文本窗口中标记的内容,该列表左下方显示当前标记项的个数,按钮”Goto”、”Delete”分别对应跳转至当前列表选中项所在文本窗口中标记的内容、将当前列表选中项的标记删除。创建标记有”Manual Create”、”Advanced Create”这两种方式分别对应将文本窗口中选中的内容部分创建标记、打开标记创建窗口。下图42所示为打开的”Tag Advanced Create”窗口,在该窗口中有”Line Range”、”Line Extend”选项分别对应行范围模式(“Start”项后的输入框输入起始行号,”End”项后的输入框输入结束行号)、行扩展模式(“Start”项后的输入框输入起始行号,”Extend”项后的输入框输入从起始行起需要扩展的行数),点击按钮Apply和OK可以将当前设置的行内容在文本窗口中创建标记。删除标记有”Delete Tag”、”Delete All Tags”这两种方式分别对应删除当前光标位置所在的标记项(若光标位置无标记项则不删除任何标记项)、删除当前文本窗口中所有标记项。
    图41 PNEdit编辑内容标记列表
    图42 PNEdit编辑内容标记创建