vim 的换行问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 的换行问题相关的知识,希望对你有一定的参考价值。
你们好
我一直对vim的换行有些疑虑
在空白文件中执行
:s/^/a\nb\rc/
得到的是
a^@b
c
也就是说\r被替换成了换行
但是使用setline()
:call setline(1,"a\nb\rc")
得到的是
a^@b^Mc
也就是说\r没有被解释为换行.
我又试了一下
:s/^/a\nb^Mc/
结果^M在替换命令中被解释为换行
但是我记得windows 下的换行是\r\n
于是我又试了一下
:call setline(1,"a\r\nb")
结果是a^M^@b
我要怎么在色条line中搞出换行符?????
我在:dis命令的结果中看到很多行后面有^J
是不是^J就是换行?????
测试环境
windows vim 7.1
^M 是换行符号 ^@ 是零字节
\r 只在替换命令的dest被解释为换行。
\n在替换命令的匹配模式中被解释为换行。 参考技术A setline没办法搞出换行的。
^M 是换行符号 ^@ 是零字节
\r 只在替换命令的dest被解释为换行。
\n在替换命令的匹配模式中被解释为换行。
获取 QTextEdit 的换行
【中文标题】获取 QTextEdit 的换行【英文标题】:Get wrapped lines of QTextEdit 【发布时间】:2017-10-31 14:37:16 【问题描述】:有没有办法让每一行显示在 QTextEdit 中?
我有一些未格式化的文本显示在 QTextEdit 中,如下所示:
QString someText = "bla bla bla bla bla bla bla bla bla bla bla bla bla";
QTextEdit* texEdit = new QTextEdit();
textEdit->setLineWrapMode(QTextEdit::FixedColumnWidth);
texEdit->setLineWrapColumnOrWidth(38);
texEdit->setWordWrapMode(QTextOption::WordWrap);
texEdit->setText(someText);
在 textEdit 中将“someText”显示为 2 行
bla bla bla bla bla bla bla bla bla
bla bla bla bla
现在我想获得在我的 QTextEdit 中显示的每一行。 但是我还没有做到这一点。
一开始我天真地尝试了
textEdit->toPlainText().split("\n")
不幸的是,它没有给我换行,因为换行不会插入换行符。
所以我想也许 QTextDocument 是要走的路,结果也是死路一条。
QTextDocument* doc = textEdit->document();
qDebug() << "document linecount: " << doc->lineCount();
qDebug() << "block count:" << doc->blockCount();
qDebug() << "lines in block: " << doc->findBlock(1).lineCount();
每个都返回 1。
任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:您需要将包装文本的每一行(在 QTextEdit 中显示)作为单独的 QString 获取,对吧?
来自 QTextEdit 控件的QTextDocument 按段落存储其文本(由QTextBlock 表示),每个段落布置为一组文本行(QTextLine)。您只需要从那里提取那些文本行。这是我的代码示例。
QStringList splitByLines(const QTextDocument *doc)
if(!doc)
return QStringList();
QStringList ret;
QTextBlock tb = doc->begin();
while(tb.isValid())
QString blockText = tb.text();
Q_ASSERT(tb.layout());
if(!tb.layout())
continue;
for(int i = 0; i != tb.layout()->lineCount(); ++i)
QTextLine line = tb.layout()->lineAt(i);
ret.append(blockText.mid(line.textStart(), line.textLength()));
tb = tb.next();
return ret;
现在你可以简单地调用 splitByLines(textEdit->document()) 来得到你想要的。请注意,当文档布局(参见documentLayoutChanged())或内容(参见contentsChanged())发生变化时,您必须重新提取行。
【讨论】:
谢谢!这正是我一直在寻找的。奇迹般有效。我以为我要生气了,因为我能找到的每个 lineCount 都返回 1。再次感谢! 很高兴我能帮上忙 :) 实际上,我一直在寻找一个问题来提高我的声誉,以便能够为我喜欢的答案投票。所以谢谢你的问题;)以上是关于vim 的换行问题的主要内容,如果未能解决你的问题,请参考以下文章
如何使用vim,用换行替换文本中第4n个空格,n=1,2,3,4............