Friday, July 15, 2016

Re: Digest for vim_use@googlegroups.com - 12 updates in 3 topics

@Richard Mitchell.

I can't tell you how much I object to this. (I'm not being aggressive, honest!)

There is no "proper extension" for a shell script.  Run "file /usr/bin/* | grep -i shell" to see a list of o/s built in shell scripts.  Then run this:
 file /usr/bin/* | grep -i shell  | awk '$1 ~ /\.sh/'

Exactly 3 of them (on my Ubuntu system) have the extension ".sh".


This is a (silly) windowsism, where file-extensions matter.   Now, Unix does sometimes care.  The C compiler, for instance expects source in .c and headers in .h. But, or course it produces executables with no .exe extension.  For a shell script, it's the #! line which tells the kernel to run it in a shell, and magic numbers for other types (which is all the same thing, and how "file" works).

I do like the idea of copying (I'd link) the .sh version to a bin/<filename> version, but let's not propagate this daft idea of filename extensions mattering to the os.

You can still grep:
If you can't remember how a case statement works:

grep case $(file * | awk '/shell/ 'print (substr($1,length($1)-1)') (# to get rid of the colon - and I've not tested that specific line, but it's something I do occasionally.)  This is proper use of Unix, not demanding file extensions.   Unix is great, but it's expert-friendly, and not as windows claims to be "user" friendly.

Sorry to rant, but it's important to me - and you might guess where I stand on systemd :-)

Graham

On 15 July 2016 at 10:19, <vim_use@googlegroups.com> wrote:
Willem D'Haese <willem.dhaese@gmail.com>: Jul 14 08:03AM -0700

On Thursday, 7 July 2016 07:20:22 UTC+2, Christian Brabandt wrote:
> It looks like the syntax script does not handle here documents.
 
> Best,
> Christian
 
Hello Christian,
 
Thanks for the help. It is actually a Bash script with filename FireTIG (without .sh extension) I made myself. Where can I find the syntax file for Bash?
 
Grtz
Charles E Campbell <drchip@campbellfamily.biz>: Jul 14 02:56PM -0400

Willem D'Haese wrote:
>> Christian
> Hello Christian,
 
> Thanks for the help. It is actually a Bash script with filename FireTIG (without .sh extension) I made myself. Where can I find the syntax file for Bash?
 
Please try the syntax files for sh.vim available at:
http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH (v154).
 
Regards,
Chip Campbell
Richard Mitchell <rwmitchell@gmail.com>: Jul 14 01:24PM -0700

On Thursday, July 14, 2016 at 11:03:47 AM UTC-4, Willem D'Haese wrote:
 
> Hello Christian,
 
> Thanks for the help. It is actually a Bash script with filename FireTIG (without .sh extension) I made myself. Where can I find the syntax file for Bash?
 
> Grtz
 
As a pointless programming tip, I put the proper extension on my script code files (.sh, .pl, etc) and then use make to copy&strip the extension/chmod them into a bin area. While this seems unnecessary, besides making it easier for vim know how to colorize the code, it also allows the use of find/grep for searching.
Yang Luo <youngluoyang@gmail.com>: Jul 13 11:41PM -0700

I write a function like this:
function InsertNumber(start, end, step)
 
let i = a:start
 
let curr_line = 0
 
while i <= a:end
if a:step <= 0
echo "Error: step cannot <=0."
break
endif
 
call append(curr_line, i)
 
let i += a:step
 
let curr_line += 1
 
endwhile
endfunction
 
 
when I call this function, I type this:
:echo InsertNumber(8,10,1)
8
9
10
 
 
1) How can I give arguement "step" a default value(eg: 1) when define the function?
like a C function:
void C_func(int a, int b_have_default_val = 1)
{
 
;
}
2)
I want to print number like this, how to do it?
08
09
10
"Jürgen Krämer" <jottkaerr@googlemail.com>: Jul 14 09:09AM +0200

Hi,
 
Yang Luo schrieb am 14.07.2016 um 08:41:
> {
 
> ;
> }
 
you can use optional arguments like this
 
function InsertNumber(start, end, ...)
if a:0 == 0
let l:step = 1
else
let l:step = a:1
endif
...
endfunction
 
> 08
> 09
> 10
 
Use the printf() function:
 
call appendline(curr_line, printf('%02d', i))
 
Or if your numbers can have more than two digits:
 
let width = trunc(log10(a:end)) + 1
let format = '%0' . width . 'd'
call appendline(curr_line, printf(format, i))
 
 
Regards,
Jürgen
 
--
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
Yang Luo <youngluoyang@gmail.com>: Jul 14 02:01AM -0700

thanks alot
Yang Luo <youngluoyang@gmail.com>: Jul 14 03:06AM -0700

I complete the function as follow, now I want to add radix option, but I don't know how to get width. Can you help me complement it
 
function InsertNumber(start, end,...) " step,is_column_first_0_padding,radix(b,d,o,x)
let l:i = a:start
let l:curr_line = 0
if a:0 == 0 " a:0 extra argument numbers
let l:step = 1
else
let l:step = a:1 " the first extra argument
endif
if a:0 == 2
let l:is_padding = 0
else
let l:is_padding = 1 "default padding
endif
if a:0 == 3
let l:radix = a:3
else
let l:radix = ""
endif
if l:radix == "b"
elseif l:radix == "o"
elseif l:radix == "x"
else
let l:width = float2nr(trunc(log10(a:end))) + 1
let l:format = '%0'.l:width.'d'
endif
while l:i <= a:end
if l:step <= 0
echo "Error: step cannot <= 0."
break
endif
if l:is_padding == 1
call append(curr_line, printf(l:format, l:i))
else
call append(curr_line, l:i)
endif
let l:i += l:step
let l:curr_line += 1
endwhile
endfunction
"Jürgen Krämer" <jottkaerr@googlemail.com>: Jul 14 02:52PM +0200

Hi,
 
Yang Luo schrieb am 14.07.2016 um 12:06:
> let l:curr_line += 1
> endwhile
> endfunction
 
there is an simpler way to calculate the necessary width -- just count
the number of characters used for the a:end parameter when printed:
 
let width = strlen(printf('%d', a:end))
 
This can also be used to calculate the width for other radices than 10:
 
if l:radix == "b"
let width = strlen(printf('%x', a:end)) * 4
elseif l:radix == "o"
let width = strlen(printf('%o', a:end))
elseif l:radix == "x"
let width = strlen(printf('%x', a:end))
else
let width = strlen(printf('%d', a:end))
endif
 
Note that there is no specification for output as a binary number in
printf().
 
Regards,
Jürgen
 
--
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
Nikolay Aleksandrovich Pavlov <zyx.vim@gmail.com>: Jul 14 07:00PM +0300

> else
> let l:step = a:1 " the first extra argument
> endif
 
let l:step = get(a:000, 0, 1)
 
Other arguments are to be handled in a similar fashion.
 
> else
> let l:radix = ""
> endif
 
let l:radix = get(a:000, 2, 'd')
 
(needed for the below suggestion).
 
> elseif l:radix == "x"
> else
> let l:width = float2nr(trunc(log10(a:end))) + 1
 
let l:width = len(a:end)
 
For other radix variants you will have to use printf indeed.
 
I could even suggest
 
let l:format = '%0*' . l:radix
let l:width = len(printf('%' . l:radix, a:end))
 
(note: no if's at all).
 
> let l:format = '%0'.l:width.'d'
 
let l:format = '%0*d'
 
> echo "Error: step cannot <= 0."
> break
> endif
 
This is wrong place to check, l:step does not change, but you check it
constantly. Move all arguments checks just below the place where you
define arguments.
 
> if l:is_padding == 1
> call append(curr_line, printf(l:format, l:i))
 
call append(curr_line, printf(l:format, l:width, l:i))
 
Bee <beeyawned@gmail.com>: Jul 13 11:28PM -0700

I tried to pass a count to <F11> but got a range error.
 
nmap <F11> :call VMA()<bar>:bn<cr>
 
Can it be done?
 
nmap <F12> :bn<cr>
 
4<F12> works
 
Bill
"Jürgen Krämer" <jottkaerr@googlemail.com>: Jul 14 08:59AM +0200

Hi,
 
Bee schrieb am 14.07.2016 um 08:28:
 
> Can it be done?
 
> nmap <F12> :bn<cr>
 
> 4<F12> works
 
in my experience counts and mappings don't work together very well. A
preceding count is always used for the first command in the mapping only.
So what happens when you enter
 
4<F11>
 
is that Vim converts your count to an address for the command-line,
which effectively results in
 
:.,.+3call VMA()|:bn
 
In your mapping you first have to remove this address and "move" the
count to the front of the command :bn. The count is stored in the global
variable v:count. There is an example at :help v:count which can be
adopted:
 
:nmap <F11> :<C-U>call VMA()<bar>execute v:count1 . "bn"<cr>
 
Note that I removed the superfluous second colon and that instead of
v:count I used v:count1 which defaults to 1 if no count was given.
 
Regards,
Jürgen
 
--
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
Bee <beeyawned@gmail.com>: Jul 14 02:45AM -0700


> --
> Sometimes I think the surest sign that intelligent life exists elsewhere
> in the universe is that none of it has tried to contact us. (Calvin)
 
More reading... a count is not needed.
First time I have used bufdo!
 
function! B_() " field delimiter ';'
g/^\d*;\+$/d " remove blank records
v/^\d\+;/d " remove non-data records
let @4=expand('%:t:r') " remove path, extension
let @4=substitute(@4,'\s\+',' ','g') " remove extra whitespace, normalize
let @4=substitute(@4,'^ ','','') " remove leading whitespace
let @4=substitute(@4,' $','','') " remove trailing whitespace
let @4=substitute(@4,'.*\zs ',';','') " replace ' ' ';' before date
let @4.=";" " append ';' filename;date
g/^\d\+;/:normal "4P " prefix lines filename;date;
endfun " example :bufdo call B_()
 
function! B() " everyone keep quiet
silent bufdo call B_()
endfun " example :call B()
 
Bill
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page.
To unsubscribe from this group and stop receiving emails from it send an email to vim_use+unsubscribe@googlegroups.com.



--
Graham Nicholls
Rock Computer Consultancy Limited.

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: