亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4129 | 回復(fù): 10
打印 上一主題 下一主題

[C] Vim使用中的復(fù)雜問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-02-07 12:27 |只看該作者 |倒序?yàn)g覽
請(qǐng)教下比如一段文本:
aaa bbb ccc ddd
     aaa bbb ccc ddd
          aaa bbb ccc ddd
如何使最后的ddd,能右對(duì)齊排列?  最終結(jié)果希望是
aaa bbb ccc           ddd
     aaa bbb ccc      ddd
          aaa bbb ccc ddd

如何才能做到,請(qǐng)vim高手指定! 萬分感激
難點(diǎn)是如何使每行、在不同列上的ddd,移動(dòng)不同的列后,最終保證所有的ddd右對(duì)齊。

論壇徽章:
59
2015年亞洲杯之約旦
日期:2015-01-27 21:27:392015年亞洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵節(jié)徽章
日期:2015-03-06 15:50:392015年亞洲杯之阿聯(lián)酋
日期:2015-03-19 17:39:302015年亞洲杯之中國
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03雙子座
日期:2014-12-10 21:39:16處女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [報(bào)告]
發(fā)表于 2015-02-07 13:12 |只看該作者
這個(gè)。。。。好像不會(huì)啊。。。。。。。。。。。。。。。。
正則做不到噬。。。。

還是寫個(gè)script吧。。。。。

論壇徽章:
2
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
3 [報(bào)告]
發(fā)表于 2015-02-07 13:57 |只看該作者
執(zhí)行這個(gè)程序吧!
  1. /* 將輸入文件按每行的最后一個(gè)字右對(duì)齊 */

  2. #include <ctype.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>

  6. int file_load(const char *filepath, char **o_buf, int *o_buf_len)
  7. {
  8.         FILE *fp;
  9.         char *buf;
  10.         int buf_len;
  11.         int retval;

  12.         retval = 0;
  13.         fp = fopen(filepath, "rb");
  14.         if (fp != NULL) {
  15.                 fseek(fp, 0, SEEK_END);
  16.                 buf_len = ftell(fp);
  17.                 buf = (char *)malloc(buf_len + 1);
  18.                 if (buf != NULL) {
  19.                         memset(buf, 0, buf_len + 1);
  20.                         fseek(fp, 0, SEEK_SET);
  21.                         if (fread(buf, buf_len, 1, fp) == 1) {
  22.                                 *o_buf = buf;
  23.                                 *o_buf_len = buf_len;
  24.                         }else {
  25.                                 retval = -3; /* ERROR: can't read file */
  26.                         }
  27.                         if (retval != 0) {
  28.                                 free(buf);
  29.                         }
  30.                 }else {
  31.                         retval = -2; /* ERROR: can't alloc memory */
  32.                 }
  33.                 fclose(fp);
  34.         }else {
  35.                 retval = -1; /* ERROR: can't open file */
  36.         }
  37.         return retval;
  38. }

  39. int nstr_chr(const char *s, int off, int lmt, int c)
  40. {
  41.         for (; off < lmt; ++off) {
  42.                 if (s[off] == c) {
  43.                         return off;
  44.                 }
  45.         }
  46.         return -1;
  47. }

  48. int nstr_trim(const char *s, int off, int lmt)
  49. {
  50.         for (; off < lmt; ++off) {
  51.                 if (!isspace(s[off])) {
  52.                         break;
  53.                 }
  54.         }
  55.         return off;
  56. }

  57. int nstr_rtrim(const char *s, int off, int lmt)
  58. {
  59.         for (; off < lmt; --lmt) {
  60.                 if (!isspace(s[lmt - 1])) {
  61.                         break;
  62.                 }
  63.         }
  64.         return lmt;
  65. }

  66. int nstr_rnpbrk(const char *s, int off, int lmt, const char *charset, int charset_len)
  67. {
  68.         for (; off < lmt; --lmt) {
  69.                 if (nstr_chr(charset, 0, charset_len, s[lmt - 1]) != -1) {
  70.                         break;
  71.                 }
  72.         }
  73.         return lmt;
  74. }

  75. int get_max_column(const char *s, int lmt)
  76. {
  77.         int off;
  78.         int line_lmt;
  79.         int line_nxt;
  80.         int column;
  81.         int line_columns;

  82.         column = 0;
  83.         for (off = 0; off < lmt; off = line_nxt) {
  84.                 line_lmt = nstr_chr(s, off, lmt, '\n');
  85.                 if (line_lmt == -1) {
  86.                         line_lmt = lmt;
  87.                         line_nxt = lmt;
  88.                 }else {
  89.                         line_nxt = line_lmt + 1;
  90.                 }
  91.                 line_lmt = nstr_rtrim(s, off, line_lmt);
  92.                 line_columns = line_lmt - off;
  93.                 if (line_columns > column) {
  94.                         column = line_columns;
  95.                 }
  96.         }
  97.         return column;
  98. }

  99. int main(int argc, const char *argv[])
  100. {
  101.         char *s;
  102.         int off;
  103.         int lmt;
  104.         int retval;
  105.         int line_lmt;
  106.         int line_nxt;
  107.         int columns;
  108.         int line_columns;
  109.         int last_word_off;
  110.         int insert_space;
  111.         const char *infile;

  112.         if (argc == 2) {
  113.                 infile = argv[1];
  114.         }else {
  115.                 infile = "sample\\data.txt";
  116.         }
  117.         printf("%s\n", infile);
  118.         retval = file_load(infile, &s, &lmt);
  119.         if (retval == 0) {
  120.                 columns = get_max_column(s, lmt);
  121.                 for (off = 0; off < lmt; off = line_nxt) {
  122.                         line_lmt = nstr_chr(s, off, lmt, '\n');
  123.                         if (line_lmt == -1) {
  124.                                 line_lmt = lmt;
  125.                                 line_nxt = lmt;
  126.                         }else {
  127.                                 line_nxt = line_lmt + 1;
  128.                         }
  129.                         line_lmt = nstr_rtrim(s, off, line_lmt);
  130.                         line_columns = line_lmt - off;
  131.                         if (line_columns < columns) {
  132.                                 last_word_off = nstr_rnpbrk(s, off, line_lmt, " \t", 2);
  133.                                 printf("%.*s", last_word_off - off, s + off);
  134.                                 insert_space = columns - line_columns;
  135.                                 printf("%*c", insert_space, ' ');
  136.                                 printf("%.*s\n", line_lmt - last_word_off, s + last_word_off);
  137.                         }else {
  138.                                 printf("%.*s\n", line_lmt - off, s + off);
  139.                         }
  140.                 }
  141.                 free(s);
  142.         }
  143.         return retval;
  144. }
復(fù)制代碼

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
4 [報(bào)告]
發(fā)表于 2015-02-07 21:10 |只看該作者
回復(fù) 3# cobras


    從你貼出的這個(gè)代碼就能看出掌握一門腳本語言是非常必要的。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報(bào)告]
發(fā)表于 2015-02-08 16:33 |只看該作者
這里面有個(gè)技巧。
不知道樓主的 ddd 有沒有規(guī)律,或者說沒有規(guī)律只要保證是最后一個(gè)字段也行。

然后這樣搞一下:
:%s/\s\+\(\S\+\)$/\t\1/
:set ts=80      <----- 這里的 80 可以根據(jù)需要自己調(diào)整,這里可以反復(fù)調(diào)整,不影響效果。
:set et
:retab

其中 :set et 是我 vimrc 里的設(shè)置,所以對(duì)我來說我可以少輸入一條命令。

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [報(bào)告]
發(fā)表于 2015-02-11 15:28 |只看該作者
好方法,手工點(diǎn)贊。

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 10:16:53
7 [報(bào)告]
發(fā)表于 2015-03-06 11:30 |只看該作者
不知道你的是否支持這種方法:shift+v選中文本 ,J K 上下移動(dòng),然后=符號(hào)對(duì)齊。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2015-04-11 22:46 |只看該作者
回復(fù) 5# flw


這是目前看到的,最完美的解決辦法了,非常感謝!

   

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2015-04-11 22:47 |只看該作者
flw 發(fā)表于 2015-02-08 16:33
這里面有個(gè)技巧。
不知道樓主的 ddd 有沒有規(guī)律,或者說沒有規(guī)律只要保證是最后一個(gè)字段也行。


非常好,很感謝!困擾了很長很長時(shí)間...

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2015-04-14 17:00 |只看該作者
回復(fù) 1# szluojianqi
使用寄存器可以做到

   
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP