天道酬勤,学无止境

将光标定位在Word文档的开始/结尾(Position cursor at start/end of Word document)

问题

我们正在使用Word Interop从.Net处理Word 2007文档。 通常在字段中做一些事情,如:

For Each f In d.Fields
    f.Select()
    //do stuff with fields here            
Next

这将保留所选文档中的最后一个字段。

因此,为了简洁起见,我们希望将光标定位在文档的末尾(或者甚至可以开始)。

谷歌搜索答案并没有太多...我能得到的最近的数字似乎表明我们需要让自己参与范围或书签。 有一个用于Document对象的GoTo方法,但是它提供的WdGoToItem选项都没有用。

没有简单的方法可以将光标发送到文档的末尾(或开始)吗?

编辑

我的部分问题是我不喜欢保留最后一个字段。 现在已经意识到我可以做到

f.Unlink

删除mergefield并将字段文本保留为纯文本。 哪个更整洁,无论我们是否也重新定位光标

回答1

@亚历山大·科耶夫尼科夫(Alexander Kojevnikov):感谢您的帮助,因为您使我处在正确的轨道上。 但是我发现我必须将.GoTo应用于单词选择对象,而不是文档。 如:

    Dim what As Object = Word.WdGoToItem.wdGoToLine
    Dim which As Object = Word.WdGoToDirection.wdGoToLast

    //below line had no effect
    //d.GoTo(what, which, Nothing, Nothing)

    w.Selection.GoTo(what, which, Nothing, Nothing)
回答2

这是在C#中的样子:

object missing = Missing.Value;
object what = Word.WdGoToItem.wdGoToLine;
object which = Word.WdGoToDirection.wdGoToLast;
doc.GoTo(ref what, ref which, ref missing, ref missing);

我猜它在VB.Net中会更容易,因为它支持可选参数。

回答3

我不确定我使用的环境是否与您相同,但是转到文档的开头结尾,这对我有用:

Private Sub moveCursorToStartOfDocument()
    w.Selection.HomeKey(WdUnits.wdStory, Nothing)
End Sub

Private Sub moveCursorToEndOfDocument()
    w.Selection.EndKey(WdUnits.wdStory, Nothing)
End Sub
回答4

我在Delphi中将单元Word_TLB与Appliction对象Word.Application一起使用

如下:

aWordDoc.Application.Selection.EndKey(wdStory,wdMove);

Word文件的结尾通常是

Selection.EndKey( WdUnits.wdStory, WdMovementType.wdMove)

当我使用

Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing);
Selection.InsertFile('documnet.docx');

新内容已插入到最后一行之前。

回答5

找出实际代码大纲的最简单方法是在Word中为该特定操作记录一个宏。 然后,您可以修改生成的代码以适合VB,VB.NET,C#等的不同语法。

下面的代码段演示了VB.NET应用程序的用法:

Imports wordNmSpace = Microsoft.Office.Interop.Word
' Create an object for the application instance
objWord = CreateObject("Word.Application")

' Create a reference of the selection object within Word
objSelection = objWord.Selection

' Now comes the part where you move selection position to the end of document
objSelection.endof(wordNmSpace.WdUnits.wdStory, wordNmSpace.WdMovementType.wdMove)

希望这可以帮助。

回答6

要在C#Word加载项VSTO中更改当前文档末尾的光标位置:

this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();

请参阅如何:以编程方式定义和选择文档中的范围

回答7

试试这个 :

int lNumberOfPages = 
  _WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false);

WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages);
回答8

您可以使用预定义的书签:

EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range

其他预定义的书签:

ActiveDocument.Bookmarks("\Para").Copy "currpara"

https://msdn.microsoft.com/zh-CN/VBA/Word-VBA/articles/predefined-bookmarks

回答9

对于网络办公室:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类
    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/105596065 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门) Qt开发专栏:开发技术(点击传送门) 《Qt开发技术:Qt富文本(一)富文本介绍、文档结构》 《Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo》 《Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类》 前话 红胖子,来也! Qt的富文本技术介绍,Qt5.9支持的HTML子集,留存当作查询工具,附带开发富文本使用到的Qt类列表。 支持的HTML子集 概述 Qt的文本小部件能够显示富文本,这是使用HTML 4标记的子集指定的。使用QTextDocument的小部件(如QLabel和QTextEdit
  • 设置光标/插入符号位置的最佳方法是什么?(What's the best way to set cursor/caret position?)
    问题 如果我要在TinyMCE选择的文本区域中插入内容,设置光标/插入符号位置的最佳方法是什么? 我正在使用tinyMCE.execCommand("mceInsertRawHTML", false, content); 插入内容,我想将光标位置设置为内容的末尾。 无论是document.selection还是myField.selectionStart都myField.selectionStart这个问题,我觉得这将得到TinyMCE的支持(通过我在他们的论坛上找不到的东西),或者这将是一个非常丑陋的hack。 后来:情况有所好转; 我刚刚发现,当您在WordPress中加载TinyMCE时,它将整个编辑器加载到嵌入式iframe中。 稍后(2):我可以使用document.getElementById('content_ifr').contentDocument.getSelection(); 获得选择作为字符串,但不是我可以使用getRangeAt(0)的选择对象。 一点一点地进步。 回答1 首先,您应该做的是在要创建的内容的末尾添加一个跨度。 var ed = tinyMCE.activeEditor; //add an empty span with a unique id var endId = tinymce.DOM.uniqueId(); ed.dom.add(ed
  • jQuery在文本区域中设置光标位置(jQuery Set Cursor Position in Text Area)
    问题 如何使用jQuery在文本字段中设置光标位置? 我有一个带有内容的文本字段,并且我希望用户将光标放在该字段上时将光标定位在某个偏移量处。 该代码应该看起来像这样: $('#input').focus(function() { $(this).setCursorPosition(4); }); 该setCursorPosition函数的实现是什么样的? 如果您的文本字段的内容为abcdefg,则此调用将导致光标的定位如下:abcd ** | ** efg。 Java具有类似的功能setCaretPosition。 javascript是否存在类似的方法? 更新:我修改了CMS的代码以与jQuery配合使用,如下所示: new function($) { $.fn.setCursorPosition = function(pos) { if (this.setSelectionRange) { this.setSelectionRange(pos, pos); } else if (this.createTextRange) { var range = this.createTextRange(); range.collapse(true); if(pos < 0) { pos = $(this).val().length + pos; } range.moveEnd(
  • 更新textarea值,但保持光标位置(update textarea value, but keep cursor position)
    问题 我有一个HTML文本区域,该区域将通过javascript定期更新。 当我这样做时: $("#textarea").val(new_val); 光标移动到文本的末尾。 我想在不更改光标位置的情况下更新文本。 另外,如果用户选择了一系列文本,则应保留突出显示。 回答1 这是在所有主要浏览器中获取和设置文本区域中选择/插入标记位置的一对函数。 注意:如果不需要支持IE <= 8,则只需使用selectionStart和selectionEnd属性(MDN)。 下面所有复杂的代码都可以用来支持IE的旧版本。 function getInputSelection(el) { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { start = el.selectionStart; end = el.selectionEnd; } else { range = document.selection.createRange(); if (range && range.parentElement() == el) { len
  • 如何在CKEditor中将光标位置设置为文本结尾?(How to set cursor position to end of text in CKEditor?)
    问题 有没有一种方法可以将光标设置在CKEditor内容的末尾? 该开发人员也问过,但未收到任何答案: http://cksource.com/forums/viewtopic.php?f=11&t=19877&hilit=cursor+end 我想将焦点设置在CKEditor中文本的末尾。 当我使用时: ckEditor.focus(); 它带我到CKEditor内部的文本开头。 回答1 Dan的回答对我来说产生了奇怪的结果,但是进行了细微的更改(除了拼写错误之外)使它起作用了: var range = me.editor.createRange(); range.moveToElementEditEnd( range.root ); me.editor.getSelection().selectRanges( [ range ] ); 回答2 根据CKEditor 4的文档,一旦拥有编辑器对象,就可以执行以下操作。 var range = editor.createRange(); range.moveToPosition( range.root, CKEDITOR.POSITION_BEFORE_END ); editor.getSelection().selectRanges( [ range ] ); 链接:http://docs.ckeditor.com/#!/api
  • IE的document.selection.createRange不包含前导或尾随空白行(IE's document.selection.createRange doesn't include leading or trailing blank lines)
    问题 我试图从文本区域中提取确切的选择和光标位置。 像往常一样,在大多数浏览器中都不容易在IE中找到。 我正在使用这个: var sel=document.selection.createRange(); var temp=sel.duplicate(); temp.moveToElementText(textarea); temp.setEndPoint("EndToEnd", sel); selectionEnd = temp.text.length; selectionStart = selectionEnd - sel.text.length; 99%的时间都有效。 问题在于TextRange.text不返回TextRange.text或结尾的换行符。 因此,当光标在一个段落之后是几行空白时,它将在前一个段落的末尾产生一个位置-而不是实际的光标位置。 例如: the quick brown fox| <- above code thinks the cursor is here | <- when really it's here 我能想到的唯一解决方法是在选择之前和之后临时插入一个字符,获取实际选择,然后再次删除这些临时字符。 这是一个hack,但是在快速实验中看起来可以正常工作。 但是首先,我想确保没有一种更简单的方法。 回答1 我要添加另一个答案
  • 使用Vim,最有效的快捷方式是什么?(What is your most productive shortcut with Vim?)
    问题 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 我听说过很多关于Vim的利弊。 看来,使用Vim(作为开发人员)应该比使用任何其他编辑器更快。 我正在使用Vim来做一些基本的事情,而我最多只能将Vim的生产率降低10倍。 在谈论速度时,您只需要注意两件事(您可能不太在意速度,但应该注意): 交替使用左右手是使用键盘的最快方法。 第二种方法是永远不要触摸鼠标,以使其尽可能快。 您动动手,抓住鼠标,将其移动并重新带回键盘需要花费很多时间(而且您经常必须查看键盘以确保将手正确地放回正确的位置) 这是两个例子,说明了为什么我对Vim的工作效率低得多。 复制/剪切和粘贴。 我一直都在做。 在所有当代编辑器中,您用左手按Shift ,然后用右手移动光标以选择文本。 然后按Ctrl + C复制,移动光标,然后按Ctrl + V粘贴。 使用Vim太可怕了: yy复制一行(您几乎从不想要整行!) [number xx]yy将xx行复制到缓冲区中。 但是您永远不会确切知道是否选择了想要的东西。 我经常必须先执行[number xx]dd然后u才能撤消! 另一个例子? 搜索并替换。 在PSPad中: Ctrl + f,然后输入要搜索的内容,然后按Enter 。 在Vim中: / ,然后键入要搜索的内容,然后在每个特殊字符前加上\
  • 获取文本输入字段中的光标位置(以字符为单位)(Get cursor position (in characters) within a text Input field)
    问题 如何从输入字段中获得插入符的位置? 我已经通过Google找到了一些零散的信息,但没有任何防弹证据。 基本上像jQuery插件之类的东西是理想的,所以我可以简单地做 $("#myinput").caretPosition() 回答1 更容易的更新: 在此答案中使用field.selectionStart示例。 感谢@commonSenseCode指出了这一点。 旧答案: 找到了这个解决方案。 不是基于jquery的,但是将其集成到jquery中没有问题: /* ** Returns the caret (cursor) position of the specified text field (oField). ** Return value range is 0-oField.value.length. */ function doGetCaretPosition (oField) { // Initialize var iCaretPos = 0; // IE Support if (document.selection) { // Set focus on the element oField.focus(); // To get cursor position, get empty selection range var oSel = document
  • 获取contentEditable插入符号索引位置(Get contentEditable caret index position)
    问题 我在如何设置contentEditable元素中的光标或插入符号索引位置方面找到了很多很好的,跨浏览器的答案,但是却没有关于如何获取或找到其索引的答案... 我想做的是知道keyup上该div内插入符号的索引。 因此,当用户键入文本时,我随时可以知道它在contentEditable元素内的光标索引。 编辑:我正在寻找div内容(文本)内的索引,而不是光标坐标。 <div id="contentBox" contentEditable="true"></div> $('#contentbox').keyup(function() { // ... ? }); 回答1 以下代码假定: 在可编辑的<div>始终只有一个文本节点,而没有其他节点可编辑的div没有将CSS white-space属性设置为pre 如果您需要更通用的方法来处理带有嵌套元素的内容,请尝试以下答案: https://stackoverflow.com/a/4812022/96100 代码: function getCaretPosition(editableDiv) { var caretPos = 0, sel, range; if (window.getSelection) { sel = window.getSelection(); if (sel.rangeCount) { range = sel
  • 如何在contenteditable元素(div)中设置插入符(光标)的位置?(How to set caret(cursor) position in contenteditable element (div)?)
    问题 我以这个简单的HTML为例: <div id="editable" contenteditable="true"> text text text<br> text text text<br> text text text<br> </div> <button id="button">focus</button> 我想要简单的事情-单击按钮时,我想将插入符号(光标)放入可编辑div中的特定位置。 通过网络搜索,我将这个JS附加到了按钮点击上,但是它不起作用(FF,Chrome): var range = document.createRange(); var myDiv = document.getElementById("editable"); range.setStart(myDiv, 5); range.setEnd(myDiv, 5); 是否可以像这样手动设置插入符号的位置? 回答1 在大多数浏览器中,您需要Range和Selection对象。 您可以将每个选择边界指定为一个节点,并在该节点内指定一个偏移量。 例如,要将插入符号设置为文本第二行的第五个字符,请执行以下操作: function setCaret() { var el = document.getElementById("editable") var range = document.createRange
  • 将鼠标指针移到特定位置?(Move the mouse pointer to a specific position?)
    问题 我正在构建HTML5游戏,并且尝试将鼠标指针放在特定事件上的某个控件上,以便在特定方向上移动始终具有相同的结果。 这可能吗? 回答1 因此,我知道这是一个古老的话题,但是我首先要说这是不可能的。 当前最接近的事情是将鼠标锁定在单个位置,并跟踪其x和y的变化。 这个概念已经被Chrome和Firefox所采用。 它由所谓的,点击逃逸将破坏它。 通过我的阅读,我认为其想法是将鼠标锁定在一个位置,并报告类似于单击和拖动事件的运动事件。 这是发行文档: FireFox:https://developer.mozilla.org/zh-CN/docs/Web/API/Pointer_Lock_API Chrome:http://www.chromium.org/developers/design-documents/mouse-lock 这是一个非常简洁的演示:http://media.tojicode.com/q3bsp/ 回答2 您不能使用javascript移动鼠标指针。 如果可以的话,请考虑一秒钟的含义;) 用户认为:“嘿,我想点击此链接” Javascript将mousecursor移至另一个链接用户单击错误的链接,无意中下载了恶意软件,该恶意软件格式化了他的C驱动器并吃掉了糖果 回答3 在客户端计算机上运行小型Web服务器。 可以是一个100kb的小东西。 Python /
  • 在Windows中如何获取光标下的单词?(How to get the word under the cursor in Windows?)
    问题 我想创建一个将单词放在光标下的应用程序(不仅适用于文本字段),但我找不到执行该操作的方法。 使用OCR非常困难。 我看到的唯一起作用的是Deskperience组件。 他们支持“本机”方式,但是我花了很多钱。 现在,我试图弄清楚这种“本机”方式是什么(也许以某种方式挂钩)。 任何帮助将不胜感激。 编辑:我找到了一种方法,但它只获取控件的整个文本。 知道如何从整个文本中仅获取光标下的单词吗? 回答1 在最新版本的Windows上,建议将信息从一个应用程序收集到另一个应用程序的方法(如果您当然不拥有目标应用程序的话)是使用UI自动化技术。 Wikipedia非常适合以下方面的更多信息:Microsoft UI Automation 基本上,UI自动化将使用所有必要的手段来收集可以收集的内容 这是一个小的控制台应用程序代码,它将监视其他应用程序的UI。 运行它,然后将鼠标移到其他应用程序上。 每个应用程序对各种“ UI自动化模式”都有不同的支持。 例如,这里显示了“值”模式和“文本”模式。 static void Main(string[] args) { do { System.Drawing.Point mouse = System.Windows.Forms.Cursor.Position; // use Windows forms mouse code instead of
  • 更新输入的值而不会丢失光标位置(Updating an input's value without losing cursor position [duplicate])
    问题 这个问题已经在这里有了答案: 在javascript replace中停止光标从跳转到输入字段的结尾(3个答案) 1年前关闭。 我要使用JavaScript强制文本框的值是小写。 我已经尝试过下面的代码,但是每次您按下一个键时,光标就会跳到输入的末尾。 如何避免这种情况? $("#beLowerCase").keyup(function(){ $(this).val( $(this).val().toLowerCase() ); }); 回答1 $("#beLowerCase").on('input', function(){ // store current positions in variables var start = this.selectionStart, end = this.selectionEnd; this.value = this.value.toLowerCase(); // restore from variables... this.setSelectionRange(start, end); }); (小提琴) 这实际上也适用于CSS: #beLowerCase{ text-transform:lowercase; } 服务器可以照顾实际的下壳体...
  • 将数据从Word文档提取到Excel SpreadSheet(Extract Data from Word Document to an Excel SpreadSheet)
    问题 我需要每天从Word文档中提取一个值并将其写入Excel工作簿。 我目前正在手动执行此操作,这对我来说是最有效的方法 使用Excel文件创建一个vba脚本并添加任何word文档引用。 2使用单词导航到表“ 9。 STOCKS ...”(以下摘录的示例–附录A),并阅读以红色突出显示的柴油(ltrs)日常使用情况。 3.将此值写入电子表格单元格。 此值的日期也是关键,但是它保存在单词文档的另一部分中(附录B)。 日期也位于文件名中,但我们对内部值的信任程度超过了单词文档名称。 利用第3点和第4点的知识,将关联的日期提取到相邻的电子表格单元格。 该表格显示在下面,由于格式原因,我无法向您发送确切的表格,但是我将能够发送该表格的值。 9.STOCKS(截至报告发布日00:01时)。 库存量每日使用量最低库存 柴油(ltrs) 390436 15012 25000 氮(mm) 35 1 19冠军1033(手提袋) 15 1 4 Nexguard(锅炉)4 0.25 4 x 200升 附录B:比阿特丽斯报告期:2010年8月10日00:01 – 24:00 如果您对我的问题有任何疑问,请与我联系,我感谢您的努力,并在此先感谢您 回答1 这是一些使用后期绑定的代码(声明对象而不是word.application等)。 从Excel 2003开始 打开一个WORD文档搜索字符串“
  • 获取文本区域中插入符号的偏移位置(以像素为单位)(Get the offset position of the caret in a textarea in pixels [duplicate])
    问题 这个问题已经在这里有了答案: 如何在文本框中获取插入符号的(x,y)像素坐标? (3个答案) 7年前关闭。 在我的项目中,我试图获取插入符号在textarea中的偏移位置(以像素为单位)。 能做到吗? 在这里问之前,我已经遍历了许多链接,尤其是Tim Down的链接,但是我找不到能在IE8 +,Chrome和Firefox中使用的解决方案。 蒂姆·唐(Tim Down)似乎正在为此工作。 我发现的其他一些链接有很多问题,例如找不到插入符位置的顶部偏移。 我试图获取插入符的偏移位置,因为我想展现内部的自动完成建议框textarea通过定位它的基础上插入符的偏移位置。 PS:我无法使用contenteditable div因为我编写了很多与textarea相关的代码。 回答1 这是一种使用rangyinputs,rangy和jQuery的方法。 它基本上将整个文本从文textarea复制到相同大小的div中。 我设置了一些CSS,以确保在每个浏览器中, textarea和div以完全相同的方式包装其内容。 单击textarea ,我读出插入符位于哪个字符索引,然后在div内的相同索引处插入一个插入符span 。 通过这样做,如果用户单击行的开头,插入符号span跳回到上一行,因此我最终遇到了问题。 为了解决这一问题,我检查了前一个字符是否为space (这将允许换行)
  • android如何将EditText光标设置为其文本的末尾(android how to set the EditText Cursor to the end of its text [duplicate])
    问题 这个问题已经在这里有了答案: 将光标放在EditText中的文本结尾(25个答案) 4年前关闭。 用户必须输入他的手机号码,手机号码必须是10个数字,我使用TextWatcher来做到这一点,就像这样 et_mobile.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub if (et_mobile.getText().toString().length() > 10) { et_mobile.setText(et_mobile.getText().toString()
  • 使用jQuery设置鼠标焦点并将光标移动到输入的结尾(Set mouse focus and move cursor to end of input using jQuery)
    问题 有人以几种不同的格式提出了这个问题,但在我的方案中我无法获得任何答案。 当用户按下向上/向下箭头时,我正在使用jQuery来实现命令历史记录。 当按下向上箭头时,我将输入值替换为上一个命令,并将焦点设置在输入字段上,但希望光标始终位于输入字符串的末尾。 我的代码如下: $(document).keydown(function(e) { var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0; var input = self.shell.find('input.current:last'); switch(key) { case 38: // up lastQuery = self.queries[self.historyCounter-1]; self.historyCounter--; input.val(lastQuery).focus(); // and it continues on from there 如何在聚焦后将光标置于“输入”的末尾? 回答1 看起来像是在聚焦后清除值,然后进行重置。 input.focus(); var tmpStr = input.val(); input.val(''); input.val(tmpStr); 回答2 看起来有点奇怪,甚至很傻,但这对我有用:
  • 在vi中快速缩进多行(Indent multiple lines quickly in vi)
    问题 它应该是微不足道的,甚至可能在帮助中,但是我不知道如何导航。 如何在vi中快速缩进多行? 回答1 使用>命令。 到缩进五线,5>>。 要标记一行并缩进,可使用V j j >缩进三行(仅Vim)。 要缩进大括号块,请将光标放在大括号之一上,然后使用> %或在block use > i B中的任何位置。 如果要在周围复制文本块,并且需要在新位置对齐块的缩进,请使用] p而不是p 。 这会将粘贴的块与周围的文本对齐。 另外,shiftwidth设置使您可以控制缩进多少空格。 回答2 该答案总结了该问题的其他答案和评论,并基于Vim文档和Vim Wiki添加了更多信息。 为简洁起见,此答案不能区分Vi和Vim特定的命令。 在下面的命令中,“重新缩进”表示“根据缩进设置缩进行”。 shiftwidth是控制缩进的主要变量。 通用命令 >> Indent line by shiftwidth spaces << De-indent line by shiftwidth spaces 5>> Indent 5 lines 5== Re-indent 5 lines >% Increase indent of a braced or bracketed block (place cursor on brace first) =% Reindent a braced or bracketed
  • 缓冲输入如何工作(How buffered input works)
    问题 下一个程序中的输入工作正常,但是当我要求显示输出时,DOS根本不显示任何内容! 这怎么可能? ORG 256 mov dx, msg1 mov ah, 09h ;DOS.WriteString int 21h mov dx, buf mov ah, 0Ah ;DOS.BufferedInput int 21h mov dx, msg2 mov ah, 09h ;DOS.WriteString int 21h mov dx, buf mov ah, 09h ;DOS.WriteString int 21h mov ax, 4C00h ;DOS.TerminateWithExitcode int 21h ; -------------------------------------- msg1: db 'Input : ', '$' buf: db 20 dup ('$') msg2: db 13, 10, 'Output : ', '$' ; -------------------------------------- 回答1 看一下如何定义输入缓冲区( buf: db 20 dup ('$') ),我知道您想偷工减料,并使输入已经以$结尾的输入准备好重新显示。 遗憾的是,这弄乱了DOS输入功能0Ah的必需设置,并且您的程序存在严重的问题,可能会导致缓冲区溢出。 此外,使用
  • 如何获得光标在bash中的位置?(How to get the cursor position in bash?)
    问题 在bash脚本中,我要获取变量中的游标列。 看起来使用ANSI转义代码{ESC}[6n是获得它的唯一方法,例如以下方法: # Query the cursor position echo -en '\033[6n' # Read it to a variable read -d R CURCOL # Extract the column from the variable CURCOL="${CURCOL##*;}" # We have the column in the variable echo $CURCOL 不幸的是,这会将字符打印到标准输出中,而我想安静地执行。 此外,这不是很便携... 有没有纯方法来实现这一目标? 回答1 您必须求助于肮脏的把戏: #!/bin/bash # based on a script from http://invisible-island.net/xterm/xterm.faq.html exec < /dev/tty oldstty=$(stty -g) stty raw -echo min 0 # on my system, the following line can be replaced by the line below it echo -en "\033[6n" > /dev/tty # tput u7 > /dev